<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
  <title>NoWayOSジャーナル</title>
  <subtitle>NoWayOSはどう作られ、なぜそう作られるのか。Single Purpose OSを作る過程の話を、お届けします。どれも事実で、その多くは確かめられます。</subtitle>
  <link href="https://www.nowayos.com/ja/journal/feed.xml" rel="self"/>
  <link href="https://www.nowayos.com/ja/journal"/>
  <id>https://www.nowayos.com/ja/journal</id>
  <updated>2026-11-13T00:00:00Z</updated>
  <author><name>NoWayOS</name><uri>https://www.nowayos.com/ja</uri></author>
  <entry>
    <title>Reactで書き、Rustで届ける</title>
    <link href="https://www.nowayos.com/ja/journal/react-in-rust-out"/>
    <id>https://www.nowayos.com/ja/journal/react-in-rust-out</id>
    <published>2026-11-13T00:00:00Z</published>
    <updated>2026-11-13T00:00:00Z</updated>
    <summary>デザイナーはReactを使い続けます。デバイスにはネイティブのRustが届きます。Screen Compilerがビルド時に画面をコードに変換し、デバイス上に攻撃対象となるブラウザを置かない仕組みを紹介します。</summary>
    <content type="html">&lt;p&gt;現代のインターフェースはReactで設計されます。そのため、制御盤から券売機まで、非常に多くの専用デバイスが、ブラウザエンジンを丸ごと載せています。世の中で最も大きく、最も攻撃されているプログラムのひとつを、いくつかのボタンと「Touch Start to begin」という言葉を描くために。&lt;/p&gt;
&lt;p&gt;私たちは、ブラウザなしで現代的なデザインの進め方を使いたいと考えました。そこで作ったのが&lt;strong&gt;Screen Compiler&lt;/strong&gt;です。&lt;/p&gt;
&lt;h2 id=&quot;画面はreactで書く&quot;&gt;画面はReactで書く&lt;/h2&gt;
&lt;p&gt;デザイナーとフロントエンド開発者は、いつもの道具をそのまま使えます。コンポーネント、props、デザイントークン、使い慣れたエディタ。画面はTSXで書きます（これはScreen Compilerのテスト用画面のひとつを短くしたものです）。&lt;/p&gt;
&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-tsx&quot;&gt;&amp;lt;Column gap={SPACE_SM} padding={SPACE_LG}&amp;gt;
  &amp;lt;Text id=&amp;quot;title&amp;quot;&amp;gt;Welcome&amp;lt;/Text&amp;gt;
  &amp;lt;Text&amp;gt;Touch Start to begin.&amp;lt;/Text&amp;gt;
  &amp;lt;Spacer /&amp;gt;
  &amp;lt;Button id=&amp;quot;start&amp;quot; onPress={onStart}&amp;gt;Start&amp;lt;/Button&amp;gt;
&amp;lt;/Column&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;届けるのは-ただのrust&quot;&gt;届けるのは、ただのRust&lt;/h2&gt;
&lt;p&gt;ビルド時に、お手元のマシンまたはCIで、Screen CompilerはこれをNoWayOSのユーザーインターフェースランタイム向けのRustに変換します。&lt;/p&gt;
&lt;pre tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;let n1 = b.text(&amp;quot;Welcome&amp;quot;)?; // welcome.tsx:17:9 &amp;lt;Text&amp;gt;
let n2 = b.text(&amp;quot;Touch Start to begin.&amp;quot;)?; // welcome.tsx:18:9 &amp;lt;Text&amp;gt;
let n4 = b.spacer(None)?; // welcome.tsx:20:9 &amp;lt;Spacer&amp;gt;
let n5 = b.button(&amp;quot;Start&amp;quot;, actions::START)?; // welcome.tsx:21:9 &amp;lt;Button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;どの行も、元になったTSXの位置を指しています。デバイスに届くのはこのコードだけです。JavaScriptエンジンも、ブラウザも、攻撃されるウェブページもありません。Screen Compiler自体がデバイスに載ることはありません。&lt;/p&gt;
&lt;!-- slot --&gt;&lt;h2 id=&quot;正確に変換するか-何もしないか&quot;&gt;正確に変換するか、何もしないか&lt;/h2&gt;
&lt;p&gt;推測で変換するコンバータは、信頼できません。Screen Compilerは、宣言されたTSXのサブセットを正確に変換し、それ以外はすべて、ファイル、行、列を示して拒否します。近似は決してしません。出力するRustには、&lt;code&gt;unsafe&lt;/code&gt;も&lt;code&gt;unwrap&lt;/code&gt;も&lt;code&gt;panic&lt;/code&gt;もありません。&lt;/p&gt;
&lt;p&gt;そのうえで、変換された画面はすべてNoWayOSのレンダラーで描画され、承認済みの画像とピクセル単位で比較されます。1ピクセルでも動けば、ビルドがそう知らせます。&lt;/p&gt;
&lt;h2 id=&quot;現在の状況&quot;&gt;現在の状況&lt;/h2&gt;
&lt;p&gt;Screen Compilerは開発中です。最初のサブセットは完成しており、次のサブセットに取り組んでいます。MITライセンスのオープンソースで、GitHubでNoWayOSと並んで公開しています。Reactで設計し、重要なデバイスを作っているチームの方は、&lt;a href=&quot;mailto:partners@nowayos.com&quot;&gt;ぜひご連絡ください&lt;/a&gt;。&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>コピーではなかったバックアップ</title>
    <link href="https://www.nowayos.com/ja/journal/the-backup-that-wasnt-a-copy"/>
    <id>https://www.nowayos.com/ja/journal/the-backup-that-wasnt-a-copy</id>
    <published>2026-11-13T00:00:00Z</published>
    <updated>2026-11-13T00:00:00Z</updated>
    <summary>アポロ11号は、別々の原理で作られた二つの誘導システムを載せて飛び、その両方を必要としました。アリアン5は同一のシステムを二つ載せて飛び、ひとつの障害が両方を止めました。この違いには名前があり、NoWayOSは、その正しい側に立てるように作られています。</summary>
    <content type="html">&lt;p&gt;バックアップを持つべきだということは、誰でも知っています。けれども、その次の気まずい質問をする人は多くありません。それは、正確には&lt;em&gt;何の&lt;/em&gt;バックアップなのか、という質問です。&lt;/p&gt;
&lt;h2 id=&quot;五回のアラーム&quot;&gt;五回のアラーム&lt;/h2&gt;
&lt;p&gt;1969年7月20日、アポロ11号の月着陸船が月面まであと数分というとき、誘導コンピュータがアラームを出しました。乗組員が管制センターに問い合わせなければならないものでした。続いて、もう一回。降下の最後の区間で、合わせて五回です。&lt;/p&gt;
&lt;p&gt;コンピュータは過負荷に陥っていました。そこでコンピュータがしたことは、この物語の中でも屈指の工学的成果です。毎回、再起動し、後回しにできる仕事を捨て、後回しにできない仕事をすぐに引き継ぎました。着陸は続けられました。&lt;/p&gt;
&lt;p&gt;ここまでは、誰もが語る部分です。次に語る価値のある出来事は、その翌日に起きました。&lt;/p&gt;
&lt;h2 id=&quot;二つ目のシステム&quot;&gt;二つ目のシステム&lt;/h2&gt;
&lt;p&gt;月着陸船は二つ目の誘導システムを載せていました。そしてそれは、一つ目の予備のコピーではありませんでした。別の会社が、別の原理で作ったものです。主系は、ジンバルの上で自由に回るプラットフォームによって姿勢の基準を保っていました。二つ目にはジンバルがまったくありませんでした。センサーは機体に直接固定されていて、どちらが上かを計算で求めていました。&lt;/p&gt;
&lt;p&gt;その役目は、主系が止まった場合に乗組員を軌道へ連れ戻すことでした。着陸のあいだ、出番はありませんでした。&lt;/p&gt;
&lt;p&gt;そして、司令船とドッキングするために上昇して戻る途中、一連の操作によって、主系のプラットフォームは、ジンバル式のプラットフォームが対処できない唯一の姿勢に入り、姿勢の基準を失いました。乗組員は機体を安定させるために二つ目のシステムに切り替え、ドッキングしました。&lt;/p&gt;
&lt;p&gt;二つ目のシステムが同じように故障することは、あり得ませんでした。その部品を持っていなかったからです。&lt;/p&gt;
&lt;h2 id=&quot;同じものが二つ&quot;&gt;同じものが二つ&lt;/h2&gt;
&lt;p&gt;次は、もう一つの物語です。1996年、アリアン5の初号機は、自分の向きを知るための慣性基準装置を二台載せて離昇しました。一台は稼働中、一台は待機中です。二台は、ソフトウェアに至るまで同一でした。&lt;/p&gt;
&lt;p&gt;三十七秒後、そのソフトウェアの中のある数値が、割り当てられた領域に収まらないほど大きくなりました。待機中の装置が止まりました。同じ飛行で同じコードを動かしていた稼働中の装置も、同じように止まりました。調査委員会の報告書は公開されており、率直に述べています。切り替える先はありませんでした。バックアップがすでに同じ道をたどっていたからです。&lt;/p&gt;
&lt;p&gt;二つのコピー。ひとつの障害。何も残りませんでした。&lt;/p&gt;
&lt;h2 id=&quot;技術者はこれを何と呼ぶか&quot;&gt;技術者はこれを何と呼ぶか&lt;/h2&gt;
&lt;p&gt;システムとその予備を一緒に止めてしまう障害を、&lt;em&gt;共通原因故障&lt;/em&gt;と呼びます。それに対する備えが&lt;em&gt;多様性冗長&lt;/em&gt;です。一つ目を止めるものが二つ目には入っていないほどに、違う作りにした二つ目のシステムのことです。&lt;/p&gt;
&lt;p&gt;スペースシャトルは、この方法で飛んでいました。フライトコンピュータのうち4台は、ある会社のソフトウェアを動かしていました。5台目は、別の会社が別個に書いたソフトウェアを動かしていました。4つのコピーは、壊れるコンピュータには備えになります。間違っているプログラムには備えになりません。4台すべてが、それを動かしているからです。&lt;/p&gt;
&lt;p&gt;ただでは手に入りません。シャトルの最初の打ち上げは、5台目のコンピュータとほかの4台が時刻について一致できず、中止されました。二つの設計は一つよりも手間がかかり、しかも両者をかみ合わせなければなりません。&lt;/p&gt;
&lt;h2 id=&quot;nowayosの出番&quot;&gt;NoWayOSの出番&lt;/h2&gt;
&lt;p&gt;現在、専用デバイスの大半は、ごく少数の汎用オペレーティングシステムのどれかで動いています。そのバックアップも同じです。ブラウザエンジンやデスクトップ、数千万行のカーネルに欠陥が見つかったとき、あるいは不具合のあるアップデートが配信されたとき、その影響は、そのソフトウェアが動いているあらゆる場所に、同じ日に現れます。&lt;/p&gt;
&lt;p&gt;NoWayOSのデバイスは、中身が違います。カーネルはseL4で、約10,000行です。その上にある私たちのコードは、すべてRustで書かれています。ブラウザエンジンも、デスクトップも、シェルもないので、それらのどれかにある欠陥は、このデバイスにはありません。&lt;/p&gt;
&lt;p&gt;つまりNoWayOSは、いまお使いのものを置き換えなくても役に立てます。その隣に立つことができます。欠かせないひとつの仕事をこなす、別の原理で作られた二つ目の方法としてです。&lt;/p&gt;
&lt;h2 id=&quot;できないこと&quot;&gt;できないこと&lt;/h2&gt;
&lt;p&gt;多様性には限界があります。それは、私たちの口からお伝えしておきたいことです。&lt;/p&gt;
&lt;p&gt;多様性がNoWayOSのデバイスに与えるのは、別の障害であって、障害がないことではありません。二つのシステムが共有するものには、何の効果もありません。電源、ネットワーク、その先のサービス、あるいは、その仕事が本来何であるべきだったかについての誤りです。そして、NoWayOSのオープンソースの部品の一部は、ほかのソフトウェアでも使われています。だからこそ、すべてのイメージは含まれるコンポーネントをすべて記載し、隣のシステムと何を共有しているかを読んで確かめられるようにしています。&lt;/p&gt;
&lt;p&gt;NoWayOSは開発中です。ですからこれは、NoWayOSがそのために設計されている役割であって、すでに果たした役割ではありません。&lt;a href=&quot;/ja/security#diverse-redundancy&quot;&gt;その土台は、セキュリティのページに書いてあります&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;アポロの技術者たちが二つ目のシステムを載せたのは、一つ目が故障すると予想したからではありません。故障しないと証明できなかったからです。そして、一つ目を止めるものが、二つ目の中に見覚えのあるものを何ひとつ見つけられないようにしました。&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>変更のたびに、自分たちのビルドを攻撃しています</title>
    <link href="https://www.nowayos.com/ja/journal/we-attack-our-own-build"/>
    <id>https://www.nowayos.com/ja/journal/we-attack-our-own-build</id>
    <published>2026-11-13T00:00:00Z</published>
    <updated>2026-11-13T00:00:00Z</updated>
    <summary>失敗することのないセキュリティテストは、何も示しません。だからNoWayOSのテストには、失敗するように作った版が付いています。そしてゲートは、プルリクエストの手が届かない場所に置いています。</summary>
    <content type="html">&lt;p&gt;どのセキュリティテストにも、居心地の悪い質問があります。そのテストは、失敗したことがありますか。一度も失敗したことのないテストが通っているのは、システムが健全だからかもしれませんし、テストに何も見えていないからかもしれません。外から見ると、この二つはまったく同じに見えます。&lt;/p&gt;
&lt;p&gt;そこでNoWayOSは、セキュリティをテストするだけにとどめません。変更のたびに攻撃し、その攻撃が止められることを確かめます。&lt;/p&gt;
&lt;h2 id=&quot;自分のものではないものに手を伸ばす&quot;&gt;自分のものではないものに手を伸ばす&lt;/h2&gt;
&lt;p&gt;NoWayOSシステムの各部分は、seL4上の専用の区画で動き、付与されたものだけを持っています。隔離テストは、その境界を越えるプローブをわざと送り込みます。あるプローブは、与えられていないアドレスを読みます。あるプローブは、読み取りしか許されていないページに書き込みます。ユーザーインターフェースとまったく同じものを持つプローブは、インターフェースが読み取りしかできない、ディスプレイの制御ページに書き込もうとします。ネットワーククライアントとまったく同じものを持つ別のプローブは、ネットワークドライバのメモリに書き込もうとします。&lt;/p&gt;
&lt;p&gt;seL4はそのすべてを止めなければならず、無関係な部分は影響を受けずに動き続けなければなりません。&lt;/p&gt;
&lt;h2 id=&quot;失敗するように作ったテスト&quot;&gt;失敗するように作ったテスト&lt;/h2&gt;
&lt;p&gt;ここからがひとひねりです。ユーザーインターフェースの隔離テストの横に、付与をひとつ、わざと広げた版を置いています。インターフェースの代役に、ディスプレイの非公開ページを与えるのです。この版のテストは&lt;strong&gt;失敗しなければなりません&lt;/strong&gt;。もし通ってしまうなら、隔離テストには何も見えていないことになり、ビルドがそう知らせます。&lt;/p&gt;
&lt;p&gt;同じ考え方が、ほかの検査にも通っています。部分どうしのメッセージのデコーダにはすべて、決してパニックせず、オーバーフローせず、境界外を読まないことを示す、モデル検査器Kaniによる有界証明があります。さらにミューテーション検査がデコーダをわざと壊し、証明がそれに気づくことを示します。外部からの入力のパーサーはすべて、敵対的なデータでファジングされます。&lt;/p&gt;
&lt;p&gt;これらはすべて、あらゆる変更が通らなければならないゲート、&lt;code&gt;make ci&lt;/code&gt;の一部です。隔離テストは毎回実行されます。証明やファジングは、対象のコードが変わるたびにやり直されます。&lt;/p&gt;
&lt;!-- slot --&gt;&lt;h2 id=&quot;手の届かないゲート&quot;&gt;手の届かないゲート&lt;/h2&gt;
&lt;p&gt;ゲートの強さは、それを変更できる手の強さで決まります。そこで、NoWayOSへのすべてのコントリビューションが通らなければならない検査は、&lt;strong&gt;Defence Agent&lt;/strong&gt;という独立した公開リポジトリで定義しています。ゲートに触れるプルリクエストは、メンテナーに向けて印が付けられます。&lt;/p&gt;
&lt;p&gt;Defence Agentは、自分自身も同じ方法でテストします。仕込みのあるプルリクエストが二十件あり、それぞれにレビュアーが見落としかねないものが隠されています。コメントの中の、右から左へ書かれた隠しテキスト。そっくりなキリル文字に差し替えられた一文字。gitリポジトリから直接取得される依存関係。信頼できないコードを実行してしまうワークフロー。そのすべてが検出されなければならず、一方で、過去の実際の変更三件は通らなければなりません。&lt;/p&gt;
&lt;h2 id=&quot;形容詞ではなく-根拠を&quot;&gt;形容詞ではなく、根拠を&lt;/h2&gt;
&lt;p&gt;これらのどれも、デバイスを“ハッキング不可能”にするものではありません。そうするものは存在しませんし、私たちがそう言うこともありません。得られるのは根拠です。何が試され、何が止められたかの記録と、それを示すコマンドです。&lt;a href=&quot;/ja/security#read-one-images-evidence&quot;&gt;実際のイメージひとつ分の根拠&lt;/a&gt;、または&lt;a href=&quot;https://github.com/NoWayOS/defence-agent&quot;&gt;ゲートそのもの&lt;/a&gt;をご覧ください。&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>証明が約束できること</title>
    <link href="https://www.nowayos.com/ja/journal/what-a-proof-can-promise"/>
    <id>https://www.nowayos.com/ja/journal/what-a-proof-can-promise</id>
    <published>2026-11-13T00:00:00Z</published>
    <updated>2026-11-13T00:00:00Z</updated>
    <summary>テストは、誰かが思いついた場合を試します。証明は、すべての場合を対象にします。seL4の数学的な証明が何を述べ、何を前提とし、NoWayOSがその横のどこに立っているのか。</summary>
    <content type="html">&lt;p&gt;ソフトウェアが信頼されるのは、たいていテストされたからです。誰かがうまくいかなくなりそうな場面を考え、試し、切り抜けるのを確かめました。この方法はよく機能します。誰も思いつかなかった場合に行き当たるまでは。&lt;/p&gt;
&lt;p&gt;証明は反対側から始めます。場合を試すのではありません。ある命題がすべての場合に成り立つことを、数学によって示します。&lt;/p&gt;
&lt;h2 id=&quot;試した場合ではなく-すべての場合&quot;&gt;試した場合ではなく、すべての場合&lt;/h2&gt;
&lt;p&gt;小さな約束を例にとりましょう。「このコードは、バッファの終わりを越えて読むことがない」。テストは千個の入力、あるいは十億個の入力を与えて、どれもコードを壊さなかったと報告できます。証明が述べるのは、種類の違うことです。コードを壊す入力は存在しない。見つからなかったのではなく、ないのです。&lt;/p&gt;
&lt;p&gt;その代償は厳密さです。証明には、コードが何をすべきかを正確に述べたもの、つまり仕様と、コードの一行一行を仕様に結びつける論証が必要です。現実のソフトウェアでは、その論証は人が目で確かめるには長すぎます。そこで、コンピュータが検査します。&lt;/p&gt;
&lt;!-- slot --&gt;&lt;h2 id=&quot;機械による検査&quot;&gt;機械による検査&lt;/h2&gt;
&lt;p&gt;「機械検査された」とは、そういう意味です。証明は、証明支援系と呼ばれるプログラムが読める言語で、省略なしに書き下されます。そしてそのプログラムが、一つひとつのステップを論理の規則に照らして検査します。九百ページ目で疲れることはなく、誰の言葉も鵜呑みにしません。&lt;/p&gt;
&lt;p&gt;seL4の証明は、Isabelle/HOLという証明支援系で、このように検査されています。証明は公開されており、誰でももう一度実行できます。&lt;/p&gt;
&lt;h2 id=&quot;sel4の証明が述べていること&quot;&gt;seL4の証明が述べていること&lt;/h2&gt;
&lt;p&gt;seL4は、すべてのNoWayOSシステムがその上で動くカーネルです。約10,000行のコードであり、デバイスを完全に制御できる唯一のコードです。要点はその小ささにあります。一万行についての論証は、最後までやり遂げられます。数千万行についての論証は、まだできません。&lt;/p&gt;
&lt;p&gt;seL4 Foundationは、&lt;a href=&quot;https://sel4.systems/Verification/proofs.html&quot;&gt;これらの証明&lt;/a&gt;を層に分けて説明しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;コードは仕様のとおりに動作し、それ以上のことはしません。&lt;/strong&gt; そこから、カーネルにはできないことの一覧が導かれます。バッファをあふれさせること、ヌルポインタをたどること、メモリをリークすること、ゼロで割ること。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;実際に動くプログラムは、証明されたコードと一致します。&lt;/strong&gt; 両者の間にはコンパイラがあるので、その出力を別の証明が検査します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;カーネルは、システムの各部分を分離しておけます。&lt;/strong&gt; ある部分は、権利を付与されていないかぎり、別の部分のデータを変更することも、読むことも、必要とする資源を奪うこともできません。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;システムは、設計されたとおりの状態で起動できます。&lt;/strong&gt; その記述に挙げられた付与と、ちょうど同じ付与を持って。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;すべての層が、すべてのプロセッサ、すべての構成について完了しているわけではありません。これは重要な点で、後でもう一度触れます。&lt;/p&gt;
&lt;h2 id=&quot;証明が前提とするもの&quot;&gt;証明が前提とするもの&lt;/h2&gt;
&lt;p&gt;証明の広さは、その命題の広さとちょうど同じで、証明は前提の上に立っています。seL4は自らの前提を書き出しています。ハードウェアがそのモデルのとおりに振る舞うこと、最も低いレベルの数百行のコードが正しいこと、カーネルの起動前に動くコードが役目を果たしていること。機密性の証明は、タイミングを対象としていません。&lt;/p&gt;
&lt;p&gt;証明は、仕様が正しいことを求めているかどうかについては何も述べず、カーネルより上のソフトウェアについても何も述べません。証明されたカーネルは、バグのあるプログラムも忠実に隔離します。バグはそこに残っています。ただ、ほかの何にも届かないだけです。&lt;/p&gt;
&lt;p&gt;これは証明の弱点ではありません。証明に価値がある理由です。何を対象とするかを正確に述べるので、何が残っているかを正確に知ることができます。&lt;/p&gt;
&lt;h2 id=&quot;nowayosの立ち位置&quot;&gt;NoWayOSの立ち位置&lt;/h2&gt;
&lt;p&gt;率直に申し上げます。NoWayOSはseL4の上で動きますが、現時点で、seL4の完了済みの証明の範囲に入るNoWayOSイメージはありません。NoWayOSが使うのはseL4の混合クリティカリティ構成で、私たちのプロセッサ向けの証明は進行中です。そして、seL4の証明がNoWayOS自身のコードを対象としたことは、一度もありません。ですから、私たちはNoWayOSを“形式検証済み”とは呼びませんし、これからも呼びません。&lt;/p&gt;
&lt;p&gt;どのイメージも、自分の立ち位置を示します。イメージの横に置かれるファイルが、カーネルの構成を、seL4が証明した構成と並べて、オプションごとに記載します。&lt;a href=&quot;/ja/security#what-sel4s-proofs-cover-and-what-they-dont&quot;&gt;セキュリティ&lt;/a&gt;のページに、実物があります。&lt;/p&gt;
&lt;h2 id=&quot;私たち自身の-小さな証明&quot;&gt;私たち自身の、小さな証明&lt;/h2&gt;
&lt;p&gt;NoWayOSのコードは、別の方法で保証を得ています。Rust、隔離、レビュー、テスト、そしてもっと控えめな種類の証明です。&lt;/p&gt;
&lt;p&gt;システムの部分どうしがやり取りするメッセージのデコーダには、すべて&lt;strong&gt;有界証明&lt;/strong&gt;があります。Kaniというモデル検査器で作ったものです。有界証明は、定められた大きさまでのすべての入力を対象とします。ここでは、デコーダが受け付ける最長のレコードまでです。その範囲の中では、本物の証明です。どんな入力も、デコーダをパニックさせず、オーバーフローさせず、境界外を読ませません。範囲の外については何も述べません。だからこそ、範囲を、ありうる最長の入力に合わせてあります。&lt;/p&gt;
&lt;p&gt;そのうえで、私たちはデコーダをわざと壊し、証明がそれに気づくことを確かめます。失敗できない証明は、&lt;a href=&quot;/ja/journal/we-attack-our-own-build&quot;&gt;失敗できないテスト&lt;/a&gt;より優れているわけではありません。&lt;/p&gt;
&lt;h2 id=&quot;等身大の姿&quot;&gt;等身大の姿&lt;/h2&gt;
&lt;p&gt;証明は、何かを“ハッキング不可能”にするものではありません。証明は、一つの命題を、すべての場合に、読むことのできる前提のもとで、真にします。命題と前提を知れば、自分が何を手にしているかがわかります。&lt;/p&gt;
&lt;p&gt;だからNoWayOSは、その証明を持つカーネルの上に作られています。そして、証明がどこまで届いているかを、イメージごとにお伝えします。&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>NoWayOSのデバイスにシェルがない理由</title>
    <link href="https://www.nowayos.com/ja/journal/why-a-nowayos-device-has-no-shell"/>
    <id>https://www.nowayos.com/ja/journal/why-a-nowayos-device-has-no-shell</id>
    <published>2026-11-13T00:00:00Z</published>
    <updated>2026-11-13T00:00:00Z</updated>
    <summary>専用デバイスの多くは、汎用コンピューターの上にひとつの仕事を載せ、その下にほかのすべてを残したままです。私たちは別の道を選びました。それぞれのデバイスを、その仕事に必要なものだけで組み立て、残りは入れないという道です。</summary>
    <content type="html">&lt;p&gt;専用デバイスへの攻撃の多くは、そのデバイスがこなす仕事を狙いません。狙うのは、それが動いているコンピューターの残りの部分です。保守用に残されたシェル、誰も止めなかったリモートアクセスのサービス、アプリケーションの裏にあるブラウザ、クラッシュひとつで現れるデスクトップ。&lt;/p&gt;
&lt;p&gt;この「コンピューターの残りの部分」は、どこにでもあります。浄水場から計測値を運び出すゲートウェイ、電力網の制御室にある端末、病院が頼りにしている機器、機械の側面にあるパネル、駅のコンコースにある画面。その多くは汎用のオペレーティングシステムで動いていて、上にひとつの仕事があり、下にはほかのすべてが、設定で無効にされたまま残っています。キオスクモードは、そのいちばん単純な形です。侵害とはいつも、見落とされたひとつの設定を誰かが見つけることです。&lt;/p&gt;
&lt;h2 id=&quot;無効にするのではなく-入れない&quot;&gt;無効にするのではなく、入れない&lt;/h2&gt;
&lt;p&gt;NoWayOSは反対側から始めます。NoWayOSのイメージに入っているのは、デバイスのアプリケーション、そのアプリケーションが使うドライバ、そしてseL4マイクロカーネルです。一覧はこれで全部です。&lt;/p&gt;
&lt;p&gt;入り込めるシェルはありません。最初から組み込まれていないからです。パスワードを推測できるリモートログインもありません。抜け出す先のデスクトップもありません。悪意あるページを待っているブラウザエンジンもありません。存在しないソフトウェアの設定を、誤ることはできません。&lt;/p&gt;
&lt;p&gt;ここまでは、すべてオペレーティングシステムの話です。その上で動くアプリケーションは別です。仕事に必要であれば、アプリケーションは利用者にサインインを求めることも、ほかのシステムにサインインすることもできます。ないのは、誰かがログインできるオペレーティングシステムです。&lt;/p&gt;
&lt;p&gt;私たちはこれを&lt;strong&gt;Single Purpose OS&lt;/strong&gt;と呼んでいます。ほかにすることが何もないコンピューター。&lt;/p&gt;
&lt;h2 id=&quot;そして-あるものは封じ込められている&quot;&gt;そして、あるものは封じ込められている&lt;/h2&gt;
&lt;p&gt;入れないことは、半分にすぎません。残った各部分（ネットワーク、画面、入力、アプリケーション）は、それぞれ専用の区画、seL4の用語でいう&lt;em&gt;保護ドメイン&lt;/em&gt;の中で動き、付与されたものにしか届きません。ネットワークドライバはパケットを運びます。ディスプレイドライバは描画します。アプリケーションは、それぞれと固定サイズのメッセージでやり取りします。&lt;/p&gt;
&lt;p&gt;すべての付与は、1行にひとつの事実としてファイルに書き出され、システムとファイルが食い違えばビルドは失敗します。ある部分のフォールトがその部分にとどまるように作られています。&lt;/p&gt;
&lt;h2 id=&quot;でも-シェルなしでどうやって直すのですか&quot;&gt;「でも、シェルなしでどうやって直すのですか」&lt;/h2&gt;
&lt;p&gt;エンジニアが最初に尋ねることで、もっともな質問です。NoWayOSのデバイスのオペレーティングシステムにはログインしません。アカウントがなく、ログインするユーザーが存在しないからです。新しいイメージをビルドし、古いものと入れ替えます。現時点では、ビルドしてボードに書き込むという意味です。デバイスが検査し、安全にフォールバックできる署名付きアップデートは、設計が済んでおり、実装はこれからです。&lt;/p&gt;
&lt;p&gt;その代わりに得られるのは、ひとつの仕事へまっすぐ起動し、パッチを当てるべきものも、攻撃されうるものもはるかに少ないデバイスです。国を支えるシステムにとっては、この引き換えこそが目的です。&lt;/p&gt;
&lt;h2 id=&quot;ご自身で確かめてください&quot;&gt;ご自身で確かめてください&lt;/h2&gt;
&lt;p&gt;実際のNoWayOSイメージひとつ分の根拠、つまり付与ファイル、部品表、seL4構成の記録は、&lt;a href=&quot;/ja/security#read-one-images-evidence&quot;&gt;セキュリティのページ&lt;/a&gt;にあります。登録もスクリプトもありません。あるのはファイルだけです。&lt;/p&gt;
</content>
  </entry>
</feed>
