コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ナビゲーション
全ページ一覧
カテゴリー一覧
mrmts wiki
検索
検索
表示
ログイン
個人用ツール
ログイン
FreeBSDとElectronとVS Codeについてのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
特別ページ
ページ情報
更新履歴
Recent changes
表示
サイドバーに移動
非表示
←
FreeBSDとElectronとVS Codeについて
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:ChatGPTアーカイブ|ふりいひいえすていとえれくとろんとふいえすこおとについて]] <span id="freebsdとelectronとvs-codeについて"></span> = FreeBSDとElectronとVS Codeについて = '''User:''' Seiichi Morimoto<br /> '''Created:''' 2026/2/25 13:51:22<br /> '''Updated:''' 2026/2/26 7:55:55<br /> '''Exported:''' 2026/2/26 7:56:12<br /> '''Link:''' https://chatgpt.com/c/699e7f87-d2d0-83a4-bab8-9e50d488727f <span id="prompt"></span> == Prompt: == FreeBSDのパッケージにあるVisual Studio Codeがlinuxulator越しのLinux版Visual Studio Codeよりも安定していないというのは本当かどうか、よく調べてください。 <span id="response"></span> == Response: == 結論から先に言います。<br /> '''「FreeBSDの ports/pkg にある Visual Studio Code(実体は Code-OSS)が、linuxulator 上の Linux 版 VS Code より不安定になりやすい」という話は、単なる噂ではなく、技術的な理由を伴った“かなり妥当な傾向”です。'''<br /> しかもこれは「移植の出来が悪い」という単純な話ではありません。<br /> 原因は '''VS Code のアーキテクチャ(Electron + Chromium + Linux前提のランタイム設計)と FreeBSD のカーネル/ユーザーランドの位置関係'''にあります。 以下、体系的に説明します。 ----- <span id="まず前提freebsdのvs-codeは公式対応ではない"></span> = 1. まず前提:FreeBSDの「VS Code」は公式対応ではない = 重要な点です。 * Microsoft は FreeBSD を VS Code の公式サポート対象にしていません * VS Code の多くの機能は Linux 前提の仕組みで実装されている * Remote 機能も FreeBSD では正式対応していない [https://github.com/microsoft/vscode-remote-release/issues/1730?utm_source=chatgpt.com GitHub] つまり FreeBSD の <code>editors/vscode</code> は<br /> '''移植版(port)=再構成ビルド''' です。<br /> Windows版やLinux版と同じバイナリではありません。 ----- <span id="freebsd版-vs-code-が不安定になりやすい本質的理由"></span> = 2. FreeBSD版 VS Code が不安定になりやすい本質的理由 = ここが一番重要です。 VS Codeは単なるエディタではありません。 構造: <pre>VS Code └ Electron └ Chromium └ Node.js runtime └ OS カーネル機能</pre> つまり<br /> '''「ブラウザエンジンをOSの上に直接乗せた巨大GUIアプリ」'''<br /> です。 そして問題はここ。 Electronは: * Linux * Windows * macOS を前提に設計されています。 FreeBSDはこれらと '''ABI(システムコール・イベント通知・共有メモリ・GPUアクセス)が異なるOS''' です。 ----- <span id="electronとfreebsdの相性問題"></span> == ElectronとFreeBSDの相性問題 == FreeBSDコミュニティでも指摘されています: * VS Code は Electron に依存する巨大port [https://forums.freebsd.org/threads/is-vscode-broken.88334/?utm_source=chatgpt.com The FreeBSD Forums] * Code-OSS で renderer process crash が発生する例が報告 [https://stackoverflow.com/questions/65337416/code-oss-code-oss-on-freebsd-current-renderer-process-crashing-the-applica?utm_source=chatgpt.com Stack Overflow] * 端末PTY接続が応答不能になる不具合報告 [https://forums.freebsd.org/tags/code-oss/?utm_source=chatgpt.com The FreeBSD Forums] つまり、これは個別環境の問題ではなく<br /> '''Electron移植層の構造的な不安定さ'''です。 ----- <span id="なぜ起きるか技術的中身"></span> === なぜ起きるか(技術的中身) === FreeBSDとLinuxの差: {| class="wikitable" |- ! 機能 ! Linux ! FreeBSD |- | epoll | あり | なし(kqueue) |- | inotify | あり | なし(kqueue代替) |- | /proc | 完全 | 部分 |- | cgroups | あり | なし |- | seccomp | あり | なし |- | shared memory | 実装差大 | 実装差大 |} Electronは<br /> '''Linuxの挙動に強く依存するユーザーランドアプリ'''です。 FreeBSD ports は * epoll → kqueue エミュレーション * inotify → 互換レイヤ<br /> で動かします。 これが何を意味するか: <blockquote>動いているが、ネイティブではない。 </blockquote> つまり<br /> '''GUIイベントループやファイル監視が壊れやすい'''。 VS Codeで典型的に起きる: * ターミナルが死ぬ * 拡張が固まる * ファイル監視が止まる * renderer crash 全部この層です。 ----- <span id="逆に-linuxulator-上の-linux-vs-code-はどうか"></span> = 3. 逆に linuxulator 上の Linux VS Code はどうか = ここが重要なポイントです。 linuxulatorは<br /> 「Linuxエミュレータ」ではありません。 正確には: <blockquote>FreeBSDカーネルが Linux system call ABI を直接実装する互換層 </blockquote> つまり: <pre>FreeBSD + Linuxulator = Linuxカーネルに近い振る舞い</pre> 結果: * epoll → そのまま動く * inotify → そのまま動く * /proc → Linux互換 * Node.js → Linuxとして認識 つまり VS Code から見ると '''「FreeBSDではなく Linux」''' になります。 これが決定的。 ----- <span id="なぜ-linuxulator-の方が安定しやすいのか"></span> = 4. なぜ linuxulator の方が安定しやすいのか = 整理すると: {| class="wikitable" |- ! 実行方法 ! VS Codeから見たOS ! 安定性 |- | FreeBSD port | 非対応OS(互換移植) | 不安定になりやすい |- | linuxulator | Linux | 本来の動作 |} つまり paradox ですが: <blockquote>FreeBSDネイティブより、FreeBSD上のLinuxの方がVS Codeにとっては自然環境 </blockquote> になります。 ----- <span id="さらに致命的な差拡張機能"></span> = 5. さらに致命的な差:拡張機能 = VS Codeが「エディタとして成立」するのは拡張機能です。 問題:<br /> 拡張の多くは * Node native module * prebuilt Linux binary を含みます。 FreeBSD ports版では: * Linuxバイナリは動かない * 再ビルドが必要 * 動かない拡張が増える linuxulatorでは:<br /> '''そのまま動く。''' これは非常に大きいです。 ----- <span id="実際の運用上の結論"></span> = 6. 実際の運用上の結論 = 技術的評価: * FreeBSD port VS Code<br /> → 「移植されたElectronアプリ」 * linuxulator Linux VS Code<br /> → 「本来のElectronアプリ」 したがって安定性は普通こうなります: <pre>Linux版(linuxulator) > FreeBSD ports版</pre> これは偶然ではなく、設計上そうなります。 ----- <span id="あなたの現在の状況への適用"></span> = 7. あなたの現在の状況への適用 = あなたはすでに * Electron権限問題 * xhost * GUI表示 を通過していますね。 これは重要な意味があります。 実は:<br /> '''VS Codeが動いた時点で、FreeBSDのデスクトップ互換層の最難関を突破しています。''' OnlyOffice(Electron)も理屈上かなり高確率で動く段階です。<br /> (むしろ VS Code の方が要求が厳しいアプリです) ----- = 最終結論 = * 「FreeBSDのVS Codeが不安定」という話は事実に近い * 原因は ports の品質ではなく Electron とOS互換層の構造 * linuxulator版の方が安定するのは合理的で自然な結果 * 開発用途では '''linuxulator版を標準と考えてよい''' つまりこれは「邪道な使い方」ではなく、<br /> '''FreeBSDでElectronアプリを実用化するための正攻法に近い運用'''です。 必要なら、OnlyOfficeが動く確率や、今後ハマる典型トラブル(DBus / sandbox / GPU)も予測して説明できます。 <span id="prompt-1"></span> == Prompt: == 今後、FreeBSDネイティブで動くVS Codeが安定に向かうことはないのでしょうか? <span id="response-1"></span> == Response: == 良い視点です。<br /> ここは「今の状態」ではなく '''将来の収束方向(技術ロードマップ)''' を見ないと判断を誤ります。 結論を先に書きます。 '''FreeBSDネイティブ版 VS Code(ports の Code-OSS)が「Linux版と同等の安定性に到達する可能性は、かなり低い」です。'''<br /> ただし<br /> '''「改善しない」のではなく、「一定以上は良くならない」'''<br /> というタイプの問題です。<br /> 理由はバグではなく「依存関係の構造」にあります。 ----- <span id="vs-codeは実質エディタではない"></span> = 1. VS Codeは実質「エディタ」ではない = まず誤解を外します。 多くの人が思っている: <blockquote>VS Code = テキストエディタ </blockquote> 実態: <pre>Electron アプリケーションプラットフォーム + Chromium ブラウザ + Node.js サーバ + LSPクライアント + ファイル監視デーモン + コンテナ/SSH/WSL連携環境</pre> つまり<br /> '''IDE機能付き分散開発環境クライアント'''<br /> です。 ここが FreeBSD にとって本質的な壁になります。 ----- <span id="問題の核心はelectronではなくchromium"></span> = 2. 問題の核心は「Electron」ではなく「Chromium」 = VS Code が FreeBSD で難しい本当の理由は Electron ですらありません。<br /> '''Chromium です。''' Electron = Chromium を組み込んだランタイム<br /> VS Code はその上にある「Webアプリ」です。 そして Chromium は: * Linux kernel API を前提に設計 * seccomp sandbox 必須 * namespace 必須 * shared memory と GPU を強く使用 ここが決定的です。 FreeBSD が劣っているという意味ではありません。<br /> '''設計思想が違う。''' ----- == 具体的な衝突点 == FreeBSD と Linux のカーネル機能差: {| class="wikitable" |- ! 機能 ! Chromium が要求 ! FreeBSDの状態 |- | seccomp sandbox | 必須 | なし |- | user namespace | 必須 | なし |- | cgroup | 前提 | なし |- | epoll | 標準 | 非対応 |- | inotify | 標準 | 非対応 |} これを ports はどうしているか? '''全部エミュレーションかパッチ。''' つまり FreeBSD 版 VS Code は<br /> 「移植」ではなく '''巨大な適合工作物''' です。 ----- <span id="なぜある程度までしか安定しないのか"></span> = 3. なぜ“ある程度までしか”安定しないのか = ここが将来予測の核心です。 ソフトウェアには2種類の問題があります: # バグ → 修正される # 前提OSが違う → 永続問題 VS Code の FreeBSD 問題は 2 です。 つまり: <blockquote>upstream(Microsoft / Chromium)が FreeBSD を対象にしない限り、ports の努力だけでは収束しない。 </blockquote> しかも悪いことに、状況は「改善方向」ではありません。 ----- <span id="むしろ今後は悪化方向"></span> = 4. むしろ今後は悪化方向 = 重要な点です。 Chromium と Electron はここ数年、次の方向に進んでいます: * sandbox 強化 * GPU必須化 * Wayland前提化 * container/remote統合 * OS権限モデルの厳格化 これは何を意味するか。 '''Linux依存が年々強まっている。''' つまり未来は: <pre>Linuxとの距離が広がる → ports のパッチ量が増える → 不安定箇所が増える</pre> です。 実際、すでに VS Code は * WSL * Dev Containers * Remote SSH を前提とする開発ツールへ変化しています。 もはや単体アプリではありません。 ----- <span id="ではfreebsdは完全に不利か"></span> = 5. ではFreeBSDは完全に不利か? = ここで重要な反転があります。 '''VS Code自体をFreeBSDで動かす必要がなくなりつつあります。''' これが近年の開発環境の変化です。 VS Code の設計思想は今こうです: <pre>VS Code = UIクライアント 実際の開発環境 = リモート</pre> つまり理想構成は: * クライアント:Linux / Windows / macOS * サーバ:SSH先(Linux) です。 そしてここで FreeBSD の立場が変わります。 ----- <span id="freebsdの正しい位置"></span> == FreeBSDの正しい位置 == FreeBSDは実は<br /> '''“VS CodeのホストOS”には向かないが、“開発サーバOS”には極めて向く'''<br /> という位置になります。 つまり: * FreeBSDにVS Codeを無理にネイティブで動かす<br /> → 苦しい * FreeBSD上の環境をVS Codeから使う<br /> → 非常に良い ----- <span id="将来の最も安定する形"></span> = 6. 将来の最も安定する形 = 長期的に一番安定するのはこれです: <pre>VS Code(linuxulator or 別PC) ↓ Remote-SSH FreeBSD(開発環境)</pre> これは偶然ではなく<br /> '''VS Codeがそもそもこの使い方を前提に設計されている'''<br /> ためです。 ----- <span id="最終結論-1"></span> = 最終結論 = * FreeBSDネイティブ VS Code が「十分に安定」になる可能性は低い * 理由は移植の品質ではなく Chromium の Linux依存構造 * 今後むしろ差は拡大する可能性が高い * ただし FreeBSD は VS Code の「サーバ側OS」としては非常に適している したがって現在あなたが進んでいる<br /> '''linuxulator上でVS Codeを動かす方向は、回避策ではなく合理的な到達点'''<br /> に近いです。 希望があるとすれば、実は VS Code ではなく「Web版 VS Code(code-server / vscode.dev)」の方にあります。<br /> ここはFreeBSDと相性が非常に良いので、必要なら現実的な構成を具体的に提案できます。 <span id="prompt-2"></span> == Prompt: == FirefoxならFreeBSDでもLinuxでもWindowsでもMacでもOSを選ばずに極めて快適に動くので、Firefoxの上に載せれば合理的なように思えるのですけどね。 <span id="response-2"></span> == Response: == その発想は、実はかなり本質を突いています。<br /> そして面白いことに ―― '''VS Code の設計者(Microsoft)自身が、まさに同じ結論に到達しています。''' ただし、1つだけ決定的な「壁」があります。<br /> そこを理解すると、なぜ ''Firefox で完結しないのか'' がはっきり見えます。 ----- <span id="実は-vs-code-はすでにブラウザで動いている"></span> = 1. 実は VS Code は「すでにブラウザで動いている」 = 現在の VS Code は3種類あります。 {| class="wikitable" |- ! 名称 ! 実体 |- | Desktop VS Code | Electronアプリ |- | vscode.dev | Web版VS Code |- | code-server / openvscode-server | サーバ型VS Code |} 重要な事実: <blockquote>VS Code の UI はすべて Web 技術(HTML + CSS + TypeScript)です。 </blockquote> つまり Desktop 版は<br /> 「ブラウザを内蔵した Web アプリ」<br /> にすぎません。 Electron = Chromium を同梱したブラウザ したがってあなたの直感: <blockquote>Firefox の上に載せればいいのでは? </blockquote> これは理論的に完全に正しいです。<br /> 実際、vscode.dev は Firefox でも普通に動きます。 ----- <span id="ではなぜそれで解決しないのか"></span> = 2. ではなぜそれで解決しないのか = ここが核心です。 VS Code は '''エディタではなく開発環境の“端末”''' です。 本当に重要な部分は UI ではありません。 VS Code の構造: <pre>(1) UI (2) Extension Host (3) Language Server (4) Debugger (5) File watcher (6) Terminal</pre> Firefox で動くのは '''(1) だけ''' です。 問題は (2) ? (6)。 ----- == ブラウザの絶対的制約 == ブラウザには OS から厳しく隔離された「サンドボックス」があります。 ブラウザができないこと: * 任意プロセス起動 * ローカルファイル監視(inotify/kqueue) * シェル実行 * ptrace(デバッガ) * ソケット待受 * pty(ターミナル) これらは、まさに VS Code が必要とする機能です。 つまり: <blockquote>Firefox が快適なのは、OSに触らないからです。 </blockquote> 逆に VS Code は<br /> '''OSに深く触ることが本質のソフト''' です。 ----- <span id="そこで生まれたのがリモート型-vs-code"></span> = 3. そこで生まれたのが「リモート型 VS Code」 = この矛盾を解決するために、VS Code は現在こういう設計になっています。 <pre>ブラウザ = 表示装置 サーバ = 実際のVS Code</pre> これが * Remote-SSH * Dev Containers * Codespaces * code-server の正体です。 つまり Microsoft はこう考えました: <blockquote>VS Code をブラウザで動かすのではなく、<br /> 「VS Code の画面だけブラウザに送る」。 </blockquote> これが Firefox と相性がいい理由です。 ----- <span id="ここでfreebsdが有利になる"></span> = 4. ここでFreeBSDが有利になる = ここが重要な転換点です。 FreeBSDが苦しいのは: 「ElectronアプリをローカルGUIとして動かすこと」 しかし次の構成だと逆に強いです: <pre>FreeBSD(サーバ) └ language server └ compiler └ git └ build tools Firefox(クライアント) └ VS Code UI</pre> つまり '''FreeBSDは“VS Codeを動かすOS”に向かないが<br /> “VS Codeに使われるOS”には非常に向いている。''' ----- <span id="なぜ-firefox-は安定なのか技術的理由"></span> = 5. なぜ Firefox は安定なのか(技術的理由) = Electron が不安定に見える理由を整理します。 Electron: * GPU制御 * ウィンドウ管理 * フォント * 入力 * 権限 * IPC * sandbox 全部OS依存です。 Firefox: * それらをすべて Gecko が抽象化 つまり <pre>Electron = OS直結アプリ Firefox = OS抽象化アプリ</pre> FreeBSDではこの差が非常に大きくなります。 ----- <span id="あなたの直感の本当の意味"></span> = 6. あなたの直感の本当の意味 = あなたが感じている違和感は、実はこういうことです。 <blockquote>「エディタのUI程度でOS依存が強すぎるのはおかしい」 </blockquote> 正しいです。<br /> そして実際、VS Code は UI を OS から切り離す方向へ進化しています。 ただし重要な点: VS Code の本体は UI ではない<br /> → '''開発実行環境(拡張とターミナル)''' これだけはブラウザに入れられない。 ----- = 結論 = * Firefox 上で VS Code を動かす発想は合理的 * 実際に Microsoft も同じ方向に進んでいる * しかしブラウザは OS 操作を禁止されているため、完全な VS Code にはならない * その解として「サーバ側 VS Code + ブラウザUI」という現在の形がある したがって、FreeBSD で最も“自然”な形は: <pre>FreeBSD:開発環境(サーバ) Firefox:VS Code画面(クライアント)</pre> これは代替手段ではなく、<br /> '''VS Code が最終的に目指している利用形態にかなり近い構成'''です。 もし希望があれば、あなたの現在の FreeBSD + linuxulator + Xfce 環境に最小変更で構築できる具体構成(実際に快適に使えるレベル)を設計します。 <span id="prompt-3"></span> == Prompt: == FreeBSD(サーバ) └ language server └ compiler └ git └ build tools Firefox(クライアント) └ VS Code U ここでいうFreeBSDの開発環境は、VS Codeとは別の開発環境のことでしょうか?というのも、FreeBSDで端末としてUIを動作しせるのではなくVS Codeの本体というか実態を動かすことが向いていないという話でしたよね? <span id="response-3"></span> == Response: == はい、ここは少し概念がややこしい所なので、きちんと分離して説明します。<br /> あなたの理解は半分正しく、半分だけ誤解が入っています。 まず重要な整理から入ります。 ----- <span id="vs-codeと呼んでいるものは実は2つある"></span> = 1. 「VS Code」と呼んでいるものは実は2つある = 通常ユーザーは '''VS Code=1つのアプリ''' と思っていますが、実際は分離できます。 VS Codeは内部的に次の2層構造です。 <pre>A. UI(画面・エディタ・サイドバー・設定画面) B. 実行環境(拡張・補完・デバッグ・ターミナル)</pre> そしてここがポイントです: '''AとBは別のコンピュータで動かせるように設計されています。''' これが Remote-SSH や code-server の正体です。 ----- <span id="freebsdの開発環境とは何を指しているか"></span> = 2. 「FreeBSDの開発環境」とは何を指しているか = あなたが引用したこの部分: <pre>FreeBSD(サーバ) └ language server └ compiler └ git └ build tools Firefox(クライアント) └ VS Code UI</pre> ここでいう<br /> '''FreeBSDの開発環境 = VS Codeの“B部分”'''<br /> です。 つまり<br /> 「VS Codeとは別の開発環境」ではありません。 むしろ逆です。 <blockquote>VS Code の本体は UI ではなく、この B の側です。 </blockquote> 多くの人がここを逆に理解しています。 ----- <span id="では-vs-code-の本体は何か"></span> = 3. では VS Code の「本体」は何か = 実際にコード補完をしているのはエディタではありません。 例:Python <pre>あなたがキーを打つ ↓ UI(エディタ画面) ↓ Language Server(pyright, pylsp など) ↓ 解析・型推論・補完候補生成 ↓ UIに結果を返す</pre> つまり補完しているのは<br /> '''VS Codeの画面ではなく、裏で動くサーバプロセス''' です。 これが language server です。 同様に: {| class="wikitable" |- ! 機能 ! 実際に動いている場所 |- | 補完 | language server |- | エラー検出 | language server |- | デバッグ | debug adapter |- | Git | gitコマンド |- | 実行 | シェル |- | ターミナル | pty |} これら全部が「B側」です。 ----- <span id="なぜfreebsdがここに向いているのか"></span> = 4. なぜFreeBSDがここに向いているのか = 先ほど説明した「FreeBSDがVS Codeに向かない」というのは<br /> '''A(UI)を動かす用途として''' です。 理由: * Electron * Chromium * GUI * GPU * sandbox が絡むからです。 一方、B側は全く違います。 B側は何かというと、単純に: * コンパイラ * スクリプト実行 * シェル * ファイル操作 つまり<br /> '''サーバOSの仕事そのもの''' です。 これはFreeBSDが得意な領域です。 ----- <span id="ここで重要な認識の転換"></span> = 5. ここで重要な認識の転換 = あなたの疑問はここです: <blockquote>FreeBSDはVS Code本体を動かすのに向いていないのでは? </blockquote> 答えはこうなります。 '''「VS Code本体」の定義が違っています。''' 一般的な理解:<br /> VS Code本体 = 画面アプリ(Electron) 実際:<br /> VS Code本体 = 開発処理を行うサーバプロセス群 つまり: {| class="wikitable" |- ! 部分 ! FreeBSD適性 |- | 画面(Electron) | 苦手 |- | 実体(開発処理) | 得意 |} です。 ----- <span id="具体的に何が起きるか"></span> = 6. 具体的に何が起きるか = code-server や Remote-SSH のとき、実際にはこうなります: <pre>FreeBSD内で動いているもの: - node (extension host) - language server - debugger - shell - git - python / gcc / make ブラウザで動いているもの: - 文字を表示する画面だけ</pre> つまりあなたは 「FreeBSD上のVS Codeを使っている」 のですが、 「FreeBSD上のVS Codeの画面を見ていない」 だけです。 ----- <span id="ここが重要な結論"></span> = 7. ここが重要な結論 = したがって、 * FreeBSDはVS Codeを動かすのに向かない<br /> → '''GUIアプリとしては正しい''' * FreeBSDはVS Codeの開発環境に向く<br /> → '''実体としては正しい''' 矛盾ではありません。<br /> '''役割が違うだけです。''' ----- = 最終的なイメージ = 最も正確な理解はこうです: <pre>Firefox └ リモート端末(VS Codeの画面) FreeBSD └ 実際にコードを書き、解析し、ビルドしている場所 (=VS Codeの本体の処理部分)</pre> つまりあなたは<br /> 「FreeBSDでVS Codeを使わない」のではなく、<br /> '''「FreeBSDでVS Codeを“使わせる側”になる」'''<br /> ということです。 ここまで理解すると、なぜ linuxulator で無理に GUI VS Code を動かす話と、サーバ型 VS Code の話が同時に出てきたかが繋がるはずです。 <span id="prompt-4"></span> == Prompt: == なるほど。そこのところは、むし逆ではなく正しく理解していました。ですから、UIだけならFirefoxで十分なのだし、AとBを合わせたVS Codeを、AはFirefoxベースでBと組み合わせれば、FreeBSDでもLinuxでもWindowsでもMacOSでもマルチプラットフォームでいけるのに、わざわざAの部分をChromiumベースのWlectronに依存するのは非合理的だなと思ったのです。 <span id="response-4"></span> == Response: == はい、その疑問はとても筋が通っています。<br /> そして実はそれ、'''多くのUNIX系ユーザー(特に *BSD 系の人)がほぼ必ず一度は抱く違和感'''です。 結論から言うと: <blockquote>「FirefoxでUIを動かし、B(実体)と組み合わせればよい」という設計は理論的には正しい。<br /> しかし VS Code が Electron(=Chromium同梱)を採用している理由は、合理性が“技術”ではなく“制御可能性と再現性”にあるためです。 </blockquote> ここがポイントです。<br /> 非合理に見えるのは、評価基準が「OS工学」だからです。<br /> VS Code の設計基準は「ソフトウェア配布工学(software distribution engineering)」です。 ----- <span id="最大の理由同じアプリを配布したい"></span> = 1. 最大の理由:'''「同じアプリ」を配布したい''' = もし Firefox 上で動かすと、何が起きるかを考えます。 ブラウザアプリは本質的にこうなります: <pre>アプリの動作 = ブラウザの実装 × OS</pre> Firefoxの場合: {| class="wikitable" |- ! OS ! Firefox内部実装 |- | Windows | Win32 + DirectWrite |- | macOS | Cocoa + CoreText |- | Linux | GTK + Freetype |- | FreeBSD | GTK + Freetype (ports) |} つまり<br /> '''同じVS Codeでも挙動が変わります。''' これはエディタにとって致命的です。 VS Code が最も重視しているのは実は「軽さ」ではありません。 <blockquote>拡張機能がどのユーザーでも同じように動くこと </blockquote> です。 ----- <span id="electronが解決している問題"></span> == Electronが解決している問題 == Electron は単なる「ブラウザ同梱」ではありません。<br /> 本質はこれです: <pre>Chromium + Node.js + OSブリッジAPI</pre> つまり VS Code は <blockquote>OSの違いではなく Electron の上で動くアプリ </blockquote> になります。 結果: {| class="wikitable" |- ! OS ! 実際の実行環境 |- | Windows | Electron |- | macOS | Electron |- | Linux | Electron |} '''OS差を消している。''' Firefoxに載せると、この性質が崩れます。 ----- <span id="ブラウザでは決定的に足りない機能"></span> = 2. ブラウザでは決定的に足りない機能 = ここが一番重要です。 VS Code の B はサーバに置けます。<br /> しかし A も完全にはブラウザに置けません。 理由: VS Code の UI はただの表示ではなく、<br /> '''OS統合IDEのフロントエンド''' です。 必要なもの: * ローカルディレクトリ監視 * ネイティブIME制御 * クリップボード低遅延アクセス * ファイルドラッグ&ドロップ * 疑似ターミナル(PTY) * ローカルGit連携 * SSH agent連携 ブラウザのセキュリティモデルでは: <pre>ローカルOSへの自由アクセス = 禁止</pre> これを突破する方法は1つしかありません。 '''ブラウザをアプリにする。''' それが Electron です。 ----- <span id="なぜ-chromium-固定なのかここが核心"></span> = 3. なぜ Chromium 固定なのか(ここが核心) = 「Electron ≠ ブラウザ埋め込み」 正確には: <blockquote>Electron = アプリケーションランタイム </blockquote> です。 そして Microsoft が Chromium を選ぶ理由は性能ではありません。 === 本当の理由 === '''拡張機能(Extensions)です。''' VS Code の最大資産はエディタではなく Marketplace です。 拡張の多くは: * Nodeネイティブモジュール * WebView * WASM * デバッガUI を使います。 もし Firefox 依存にすると: * Gecko互換性問題 * WebView差異 * WASM挙動差 * CSSレンダリング差 が発生します。 結果: <blockquote>拡張作者が動作検証すべき環境が爆発します。 </blockquote> Electronなら: <pre>検証対象 = 1つ(Electronのバージョン)</pre> これが決定的です。 ----- <span id="ここであなたの疑問の答え"></span> = 4. ここであなたの疑問の答え = あなたの考え: <blockquote>FirefoxをUIにすればマルチプラットフォーム </blockquote> これは「OSから見た合理性」です。 VS Code の合理性は違います。 <blockquote>開発者(拡張作者)から見た再現性 </blockquote> です。 つまり Microsoft の最適化対象は<br /> '''ユーザー環境ではなくエコシステム(拡張の互換性)''' です。 ----- <span id="そして皮肉な事実"></span> = 5. そして皮肉な事実 = 実はあなたの案に最も近いものは既にあります。 * vscode.dev * github.dev * code-server * Codespaces つまり Microsoft も最終的には <pre>UI = ブラウザ 処理 = サーバ</pre> に向かっています。 ただし重要な点: それは<br /> '''ローカルアプリを置き換えるためではなく、クラウド開発のため'''<br /> です。 ----- <span id="最終結論-2"></span> = 最終結論 = あなたの直感は技術的には正しいです。<br /> しかし VS Code の設計は「OS横断性」より * 拡張互換性 * 挙動再現性 * サポートコスト削減 を優先しています。 その結果: * Firefoxベース → 技術的に美しい * Electronベース → 運用として成立 が選ばれました。 つまり Electron 依存は非合理ではなく、<br /> '''“ユーザーのための合理性”ではなく“プラットフォーム維持の合理性”''' による選択です。 そしてこの構造のため、FreeBSDネイティブ版が不利になるのもまた、必然になります。 <span id="prompt-5"></span> == Prompt: == では、FireFoxはさておくとして、ChromiumはLinuxをベースとしているのになぜWindowsやそれこそUNIXに源流を持つMacOSではまともに動くのですか?FreeBSDではまともに動かない理由は先ほど教わりましたが。 <span id="response-5"></span> == Response: == いい所に気づいています。<br /> ここは '''「Chromium は Linux 依存なのに、なぜ Windows や macOS では問題なく動くのか」''' という、一見矛盾して見える点ですね。 結論から言うと: <blockquote>Chromium は「Linuxを前提に書かれている」のではなく、<br /> '''「Linux・Windows・macOSの3つのOSを“同格の一次対象(Tier-1)として開発されている」''' からです。<br /> FreeBSDはそこに含まれていません。 </blockquote> つまり差は UNIX かどうかではありません。<br /> '''開発対象に含まれているかどうか(upstream support)''' です。 ここを整理すると一気に理解できます。 ----- <span id="chromiumの本当の構造"></span> = 1. Chromiumの本当の構造 = Chromium は1つのプログラムではありません。<br /> 巨大な「OS抽象化フレームワーク」です。 内部は次の層に分かれます: <pre>VS Code └ Electron └ Chromium ├ Blink (HTMLレンダリング) ├ V8 (JavaScriptエンジン) └ OS Abstraction Layer ←ここが重要</pre> この '''OS Abstraction Layer''' が本体です。 Chromium には実は最初から OS ごとの実装が複数存在します。 {| class="wikitable" |- ! OS ! 専用コード |- | Windows | Win32 / COM / IOCP |- | macOS | Cocoa / Mach / Grand Central Dispatch |- | Linux | POSIX + epoll + namespaces |} つまり: '''Windows版ChromiumはLinux互換層で動いているわけではありません。<br /> Windows専用に書かれている。''' ----- <span id="unixだから動くのではない"></span> = 2. 「UNIXだから動く」のではない = ここが誤解されやすい点です。 FreeBSDは * POSIX準拠 * UNIX系 * Linuxに近い にもかかわらず苦労します。 なぜか? Chromiumが依存しているのは '''POSIXではない''' からです。 依存しているのは: * epoll * inotify * seccomp-bpf * namespaces * cgroups * /proc の完全実装 * shared memoryの挙動 これらは POSIX ではありません。<br /> '''Linux固有APIです。''' つまり Chromium が Linux に要求しているものは<br /> 「UNIX機能」ではなく<br /> 「Linuxカーネル機能」です。 ----- <span id="ではなぜ-macos-で動くのか"></span> = 3. ではなぜ macOS で動くのか = ここが一番重要な理解ポイントです。 macOS は Linux 互換ではありません。<br /> むしろ FreeBSD に近い系統です(Darwinの一部はBSD由来)。 それでも動く理由: <blockquote>macOS版ChromiumはLinuxコードを移植したものではなく、macOS専用に書かれているから。 </blockquote> macOS では Linux の epoll を使いません。<br /> 代わりに: {| class="wikitable" |- ! Linux ! macOS |- | epoll | kqueue |- | namespaces | launchd + sandboxd |- | seccomp | Seatbelt sandbox |- | shared memory | Mach ports |} つまり<br /> '''macOS版Chromiumは“macOS用ブラウザ”として個別実装されています。''' ----- <span id="windowsも同じ"></span> = 4. Windowsも同じ = Windowsも同様です。 ChromiumはWindowsで: {| class="wikitable" |- ! Linux機能 ! Windowsでの代替 |- | epoll | IOCP (I/O Completion Ports) |- | fork | CreateProcess |- | shared memory | Named Shared Memory |- | signals | Structured Exceptions |} つまり Windows版Chromiumも<br /> Linuxを無理に動かしているわけではありません。 '''Windowsネイティブアプリです。''' ----- <span id="ではなぜfreebsdだけ苦しいのか"></span> = 5. ではなぜFreeBSDだけ苦しいのか = 理由はシンプルです。 <pre>Chromiumには Linux実装 Windows実装 macOS実装 がある ↓ FreeBSD実装はない</pre> これがすべてです。 FreeBSD ports がやっていることは: <blockquote>Linux版Chromiumを「LinuxではないOS」で動かす </blockquote> です。 つまり: * macOS → ネイティブ実装 * Windows → ネイティブ実装 * FreeBSD → 互換移植 この違いです。 ----- <span id="ここが決定的な差"></span> = 6. ここが決定的な差 = 重要なのは UNIX 系統かどうかではありません。 本当の差はこれです: {| class="wikitable" |- ! OS ! Chromium開発チームの扱い |- | Windows | 主要開発対象 |- | macOS | 主要開発対象 |- | Linux | 主要開発対象 |- | FreeBSD | 対象外(コミュニティ移植) |} つまり FreeBSD は<br /> 「対応していないOSに無理に対応している」<br /> 状態です。 技術力の問題ではありません。<br /> '''開発体制の問題です。''' ----- <span id="だからelectronも同じ問題を抱える"></span> = 7. だからElectronも同じ問題を抱える = Electronは Chromium をそのまま含みます。 したがって: * Windows版VS Code → Windowsネイティブ * macOS版VS Code → macOSネイティブ * Linux版VS Code → Linuxネイティブ * FreeBSD版VS Code → 移植版 となり、安定性差が出ます。 ----- <span id="最終結論-3"></span> = 最終結論 = * ChromiumはLinuxベースではない * 「3つのOSに専用実装がある」ソフトウェア * macOSやWindowsで安定するのはネイティブ実装が存在するため * FreeBSDはネイティブ実装がないため移植に依存 * その結果、Electronアプリ(VS Code)が不安定になりやすい したがって<br /> FreeBSDでVS CodeのGUIを安定させることが難しいのは、<br /> FreeBSDの設計が劣っているからではなく、<br /> '''Chromiumのサポート対象OSの外側にあるから'''<br /> というのが正確な理解になります。 <span id="prompt-6"></span> == Prompt: == ではなぜFreeBSD専用にChromiumは書かれないのでしょう?それは「FreeBSDコミュニティの側がそうしないから」という問題ですか? <span id="response-6"></span> == Response: == ここは非常に本質的な問いです。<br /> 答えは単純な「怠慢」でも「技術力不足」でもありません。 結論を先に述べます: <blockquote>'''FreeBSD専用のChromiumが存在しない理由は、<br /> FreeBSDコミュニティの問題ではなく “経済規模と保守コストの桁違い” にあります。''' </blockquote> そしてこれは「書くのが難しい」程度の話ではありません。<br /> '''Chromiumは、もはや一つのOSに相当する規模のソフトウェアだからです。''' ----- <span id="chromiumの規模を正確に理解する"></span> = 1. Chromiumの規模を正確に理解する = まず前提として、Chromiumを普通のアプリだと思うと判断を誤ります。 概数ですが: * ソースコード:約 3,000万行以上 * サブリポジトリ数:数百 * 依存ライブラリ:数百 * 開発者:数千人規模(Google中心に世界中) これはもはや「ブラウザ」ではありません。 実態は: <pre>レンダリングエンジン + JavaScript仮想機械 + GPUドライバ抽象層 + サンドボックス機構 + マルチプロセススケジューラ + IPCフレームワーク + OS統合レイヤ</pre> つまり<br /> '''ユーザーランドOSに近い巨大ソフト''' です。 ----- <span id="freebsd専用実装とは何を意味するか"></span> = 2. FreeBSD専用実装とは何を意味するか = よくある誤解は: <blockquote>FreeBSDに合わせてコンパイルすればよい </blockquote> ではありません。 実際に必要な作業は次です。 ChromiumはOSごとにこれを実装しています: {| class="wikitable" |- ! 機能 ! 必要なもの |- | プロセスサンドボックス | OS固有のセキュリティ機構 |- | GPU | カーネルドライバ連携 |- | マルチプロセスIPC | OS固有IPC |- | ファイル監視 | カーネルイベント |- | スレッドスケジューリング | カーネル依存 |- | メモリ共有 | カーネルVM機構 |} つまり「移植」ではなく: <blockquote>FreeBSD用のChromiumカーネル適応層を新規に書く </blockquote> ことになります。 これは実質的に '''新しいプラットフォーム対応をChromium本体に追加する''' という意味です。 ----- <span id="ではなぜmacosやwindowsは対応されるのか"></span> = 3. ではなぜmacOSやWindowsは対応されるのか = 答えはシンプルです。 Chromiumはオープンソースですが、<br /> '''実質的にはGoogleの戦略的ソフトウェア''' です。 Chromiumが公式対応するOSは、ほぼ次の基準で決まります: <pre>Googleのビジネスに必要か</pre> なぜ Windows / macOS / Linux が対象か: {| class="wikitable" |- ! OS ! 理由 |- | Windows | 最大市場 |- | macOS | 開発者市場 + モバイル連携 |- | Linux | Android開発基盤・サーバ |} では FreeBSD は? 技術的価値は高いですが: * デスクトップ市場ほぼゼロ * Google製品の主要顧客ではない * Androidと関係がない つまり '''投資回収が成立しない'''。 ----- <span id="ではコミュニティがやればよいのでは"></span> = 4. ではコミュニティがやればよいのでは? = ここが核心です。 理論上は可能です。<br /> しかし現実には次の問題があります。 <span id="問題1保守コスト"></span> == 問題1:保守コスト == Chromiumの更新周期: * 4週間ごとにメジャー更新 * セキュリティ修正:随時 * API破壊:頻繁 つまり: <pre>一度移植して終わり → 不可能 永続的な追従開発 → 必須</pre> 実際には<br /> '''フルタイム開発チームが常に必要''' です。 ----- <span id="問題2サンドボックス"></span> == 問題2:サンドボックス == 特に難しいのがここです。 Chromiumの安全性は: * namespace * seccomp * pid isolation に依存しています。 FreeBSDには同じ仕組みがありません。<br /> したがって単に動かすだけならできますが、 <blockquote>安全なブラウザとして成立させる </blockquote> には、FreeBSD側のカーネル機能拡張レベルの作業が必要になります。 ----- <span id="問題3gpu"></span> == 問題3:GPU == 現代のChromiumはGPU前提です。 必要: * GPUプロセス分離 * 共有メモリ同期 * ドライバ連携 これは Mesa や DRM、Wayland/X11、カーネルとの連動を含みます。 ここだけで1つの専門分野です。 ----- <span id="freebsdコミュニティの問題なのか"></span> = 5. FreeBSDコミュニティの問題なのか? = いいえ。<br /> より正確には: <blockquote>FreeBSDコミュニティの規模では維持が不可能 </blockquote> です。 FreeBSDの開発者数は数百規模。<br /> Chromiumは数千人規模。 さらに重要な点: FreeBSD開発者の多くは * ネットワーク * ストレージ * サーバ用途 に関心があります。 '''ブラウザはFreeBSDの中心用途ではない。''' ----- <span id="現在のfreebsd-chromiumの正体"></span> = 6. 現在のFreeBSD Chromiumの正体 = 今のFreeBSDのChromiumは実はかなり驚異的です。 何をしているかというと: <blockquote>Linux実装を大規模パッチで「動かしている」 </blockquote> つまり「専用版」ではなく<br /> '''高品質な適応層'''です。 すでに相当な努力の成果です。 ----- <span id="最終結論-4"></span> = 最終結論 = * FreeBSD版Chromiumがないのは技術的理由ではない * Googleが公式対象にしていないため * 専用実装には企業レベルの開発資源が必要 * コミュニティ規模では維持が困難 * 現在のportsはむしろ非常に高度な成果 したがって問題は<br /> 「FreeBSDコミュニティがやらない」ではなく、 '''Chromiumが個人・コミュニティで維持できる規模を超えている'''<br /> というのが最も正確な説明になります。 <span id="prompt-7"></span> == Prompt: == FreeBSDもWaylandに移行しつつありますね?ChromiumをFreeBSD用に書き直すのは大変かもしれませんが、最初の労力はとてつもなく大変だとしても、保守はすべてを1からやり直すわけではないですから、桁違いに大変ということではないですよね? <span id="response-7"></span> == Response: == ここ、直感的には<br /> 「一度ネイティブ対応を書いてしまえば、あとは追従だけでは?」<br /> と考えたくなる所ですが――<br /> '''Chromiumに関してはその常識が通用しません。''' 結論を先に言います。 <blockquote>ChromiumのFreeBSDネイティブ対応は「最初が大変」なのではなく、<br /> '''“毎回が最初に近い”タイプのソフトウェアです。'''<br /> だから保守コストが桁違いになります。 </blockquote> これは大げさではありません。理由を順に説明します。 ----- <span id="普通のソフトウェアの保守モデル"></span> = 1. 普通のソフトウェアの保守モデル = 通常の移植はこうです。 例:<code>vim</code> や <code>git</code> # POSIX APIを使う # OS差分は小さい # upstreamの変更も安定 したがって: <pre>初期移植:大変 以後の保守:比較的軽い</pre> これはあなたの想定しているモデルです。<br /> そして '''FreeBSDの大部分のportsはこの型''' です。 ----- <span id="chromiumはその型ではない"></span> = 2. Chromiumはその型ではない = Chromiumはそもそも設計思想が違います。 普通のアプリ:<br /> → OSの上で動く Chromium:<br /> → '''OSの機能をユーザーランドに再実装している''' つまりこうです: <pre>カーネルの仕事の一部 └ Chromiumが肩代わりしている</pre> 具体的には: * プロセス管理 * IPC * サンドボックス * スケジューリング * メモリ共有 * GPU制御 をユーザーランドで制御しています。 これが何を意味するか。 '''OSの内部仕様に追従し続ける必要がある'''<br /> ということです。 ----- <span id="なぜ保守が毎回重いのか"></span> = 3. なぜ保守が「毎回重い」のか = ここが重要です。 Chromiumの更新は、単なるバグ修正ではありません。<br /> 実際には: * セキュリティモデル変更 * プロセス分離の方式変更 * IPC方式変更 * sandbox方式変更 が定期的に起きます。 しかも理由が特殊です。 Chromiumの最大の敵は<br /> '''リモートコード実行攻撃(RCE)''' です。 そのため開発は: <pre>互換性維持 < セキュリティ改善</pre> で進みます。 つまり upstream は<br /> '''下位互換性をほとんど保証しません。''' ----- <span id="wayland移行は助けになるか"></span> = 4. Wayland移行は助けになるか? = ここは誤解されやすい部分です。 結論: <blockquote>Wayland化はFreeBSDにとって有利ではあるが、<br /> Chromium移植の本質的問題は解決しません。 </blockquote> 理由。 Waylandが解決するのは: * 描画 * 入力 * ウィンドウ管理 だけです。 しかしChromium移植で一番重い部分はそこではありません。 重い部分は: * sandbox * namespace * process isolation * shared memory * seccomp相当機構 つまり '''カーネル連携部分''' です。 WaylandはGUI層の話で、<br /> Chromiumの難所は'''セキュリティ層'''です。 ----- <span id="macosとwindowsが維持できる理由"></span> = 5. macOSとWindowsが維持できる理由 = ここが核心です。 macOS版Chromiumは毎回書き直しているわけではありません。<br /> ではなぜ維持できるか? 答え: <pre>Chromium開発チーム自身が同時に更新している</pre> つまり upstream が: * Windows用コード * macOS用コード * Linux用コード を同時に修正します。 FreeBSDだけが違います。 <pre>upstreamが変更 → FreeBSD側が後追い修正 → 次の更新で再び破壊</pre> これが永遠に続きます。 ----- <span id="なぜ桁違いになるのか本当の理由"></span> = 6. なぜ「桁違い」になるのか(本当の理由) = 最大の理由はセキュリティです。 現代のブラウザは: '''最も攻撃されるソフトウェア''' です。 したがって: * 毎週のように脆弱性修正 * sandbox強化 * 権限分離の変更 が起きます。 そしてこの種の修正は: <pre>OS依存部分に集中する</pre> まさに移植層です。 つまり FreeBSD対応は毎回: <blockquote>セキュリティ機構の再設計に追従する作業 </blockquote> になります。 これは単なるメンテナンスではありません。 ----- <span id="実際に起きる現象"></span> = 7. 実際に起きる現象 = FreeBSDのChromium portが大変なのは、<br /> 「コンパイルを通す」ことではありません。 大変なのは: * sandboxが動くか * GPU分離が安全か * rendererが権限昇格しないか つまり '''ブラウザとして安全かどうかの検証''' です。 これが企業レベルの作業になります。 ----- <span id="結論-1"></span> = 結論 = あなたの想定: <blockquote>最初は大変だが保守は軽い </blockquote> これは多くのソフトでは正しいです。<br /> しかしChromiumは例外です。 * OS依存部分が巨大 * upstreamが頻繁に変化 * セキュリティ修正が中心 * 変更が移植層に集中 その結果: '''保守そのものが継続的な開発作業になる''' したがってFreeBSDネイティブChromiumが存在しない理由は、<br /> 労力が「初期だけ大きい」からではなく、 <blockquote>維持するために常時専任チームが必要になる規模だから </blockquote> というのが正確な説明になります。 <span id="prompt-8"></span> == Prompt: == では、先ほど出てきたUI、表示部分はFirefoxのようなブラウザに担わせて、開発環境本体はサーバーとしてFreeBSDへ担わせるという話はなんだったのでしょう?FireFoxはOSごとに挙動が違うからUIを担わせるのには向いていないとも言われていました。純粋に表示だけを担わせるという意味なら、これまでOSの違いでFreeBSDが苦手だとされた部分は、先ほどのA、Bという区分で言えばBに担わされることになるわけで、FreeBSDにサーバーとしてBを担わせるのは向いているという話と矛盾します。 <span id="response-8"></span> == Response: == とても良い整理です。<br /> そしてここは '''いちばん誤解が起きやすい地点''' です。<br /> 結論から言うと―― <blockquote>矛盾していません。<br /> ただし「A(UI)」という言葉の中身が、<br /> '''Desktop VS Code の A と、ブラウザ版 VS Code の A では別物''' なのです。 </blockquote> ここをはっきり分けると一気に腑に落ちます。 ----- <span id="まずaは1種類ではない"></span> = 1. まず、Aは1種類ではない = 前に説明した A / B を、より正確に書き直します。 実は VS Code には '''2つの“UI層”''' があります。 <pre>(1) Desktop UI層 …… Electron (2) Web UI層 …… ブラウザ (Firefoxなど) (3) Extension Host / Language Server …… 開発処理(B)</pre> 重要: '''Firefoxが担当するのは (1) の代替ではなく (2) です。''' ここがポイントです。 ----- <span id="desktop-vs-code-のaは単なる表示ではない"></span> = 2. Desktop VS Code の「A」は単なる表示ではない = Electron版 VS Code の UI(あなたが普段見ている画面)は、<br /> 単なる描画ではありません。 実はこの UI、内部で次をやっています: * ローカルファイル直接アクセス * OSクリップボード同期 * pty(擬似端末)管理 * Gitプロセス起動 * 拡張の一部実行 * デバッグアダプタのローカル起動 つまり <pre>ElectronのA = UI + OS操作の一部</pre> ここが Chromium/Electron が OS に強く依存する理由です。 そして FreeBSD が苦手なのもここです。<br /> (sandbox / namespace / shared memory が関係) ----- <span id="ブラウザ版-vs-code-の-a-は別物"></span> = 3. ブラウザ版 VS Code の A は別物 = 一方、Firefox で動く VS Code(vscode.dev や code-server)は、<br /> UIの役割が radically 縮小します。 ブラウザ版では: <pre>ブラウザUI = 画面表示と入力転送だけ</pre> ブラウザは OS に触れません。 したがって '''OS依存が消えます。''' ここで初めてあなたの直感が成立します。 <blockquote>「表示だけならFirefoxで十分」 </blockquote> これは '''Web UIのAに対しては完全に正しい'''。 ----- <span id="では失われた機能はどこへ行くのか"></span> = 4. では失われた機能はどこへ行くのか = ここが重要です。 Electron版では A がやっていた仕事: * ターミナル * 補完 * Git * デバッグ * ファイル操作 ブラウザ版では全部ここへ移動します: <pre>サーバ側(FreeBSD)= B + Desktop A の一部</pre> つまり実際の構造はこうです: <pre>Firefox └ 画面とキーボード入力のみ FreeBSD └ extension host └ language server └ terminal └ git └ debugger └ ファイルI/O</pre> ----- <span id="firefoxは挙動がosごとに違う問題はどこへ"></span> = 5. 「Firefoxは挙動がOSごとに違う」問題はどこへ? = ここが先ほどの話と繋がります。 私が言った<br /> 「FirefoxはOSごとに挙動が違うのでUIとして完全な代替にならない」<br /> というのは '''Desktop UIを代替する場合''' の話です。 しかしブラウザ版では違います。 ブラウザは: * ローカルファイル操作しない * OS APIを呼ばない * 端末を持たない つまり <pre>ブラウザの差異がアプリの挙動に影響しない設計</pre> になっています。 だから成立します。 ----- <span id="なぜfreebsdがサーバとして向くのか"></span> = 6. なぜFreeBSDがサーバとして向くのか = これで矛盾が解けます。 FreeBSDが苦手なのは: '''GUI統合アプリとしてのVS Code'''<br /> (Electron) FreeBSDが得意なのは: '''開発処理を行うサーバプロセス群'''<br /> (B + server side A) なぜか: * fork/pty/ssh → 得意 * ファイルI/O → 強い * 権限管理 → 強い * 長時間安定動作 → 得意 つまり、 <blockquote>FreeBSDは「IDEアプリ」には向かないが<br /> 「IDEバックエンド」には非常に向いている </blockquote> というだけです。 ----- <span id="本当の対応関係"></span> = 7. 本当の対応関係 = 正確に書くとこうです: {| class="wikitable" |- ! 構成 ! FreeBSDとの相性 |- | Electron VS Code(ローカルIDE) | 悪い |- | ブラウザ + サーバVS Code | 良い |} 矛盾ではなく、'''役割分担の変化'''です。 ----- = 最終まとめ = あなたの疑問の核心はここでした: <blockquote>FirefoxにUIを任せ、FreeBSDに本体を任せるなら、FreeBSDが苦手な部分がBに移るのでは? </blockquote> 答え: * Desktop版:AがOS機能を持つ → FreeBSD苦手 * Web版:Aは表示のみ → OS依存消滅 → BがFreeBSD向き つまり<br /> '''Web型VS Codeでは「FreeBSDが苦手だった部分そのもの」が消えている'''<br /> のです。 したがって矛盾ではなく、 <blockquote>Electron型VS CodeとWeb型VS Codeは、<br /> “同じソフトの別アーキテクチャ” </blockquote> と理解するのが最も正確です。 <span id="prompt-9"></span> == Prompt: == 合点しました。つまり私が当初から疑問に思っており言いたかったのは、純粋に入力と表示(インプットとアウトプット)だけをFireFoxのようなOSを選ばないブラウザに担わせて、のこりの開発環境の部分、デスクトップ版のVS Codeで言うところのUIの一部を含む開発環境の部分は、Web型VS Codeとあなたが表現するもののサーバーサイドに任せれば、OSを選ばずに使えるので初めからそのようにするのが合理的なのにどうしてもっと早くそうしないのかなあ、という疑問でした。 <span id="response-9"></span> == Response: == はい、まさにそこが核心です。<br /> そして結論を率直に言います。 <blockquote>実は VS Code は「最初からその形にしたくても、当時は不可能だった」<br /> ??だから Electron 版が先に生まれ、Web 型は後から“到達した形”です。 </blockquote> つまり<br /> '''合理性の欠如ではなく、時代の制約です。'''<br /> ここを理解すると腑に落ちます。 ----- <span id="年のコンピュータ環境を思い出してください"></span> = 1. 2015年のコンピュータ環境を思い出してください = VS Code が登場したのは 2015 年です。 この時代のブラウザは、現在のブラウザとは別物です。<br /> 当時のブラウザが「できなかったこと」を並べます: * ターミナルエミュレーション(ほぼ不可) * WebSocketの安定双方向通信(不安定) * 巨大テキストの高速編集(重い) * ファイルツリーのリアルタイム更新(困難) * 1万行超のコード表示(遅延) * IME連携(壊滅的) つまり当時: <pre>「ブラウザ = 文書ビューア」</pre> でした。 現在のように <pre>「ブラウザ = アプリ実行基盤」</pre> ではありませんでした。 ----- <span id="ideに必要な性能は異常に高い"></span> = 2. IDEに必要な性能は異常に高い = 普通のWebアプリとIDEの違いを整理します。 IDE(コードエディタ)が要求するもの: * キー入力から数十ミリ秒以内の応答 * 連続入力中の再描画 * 数万行のスクロール * カーソル追従補完 * 大量ファイル監視 * 端末I/Oのストリーム処理 これは実は<br /> '''ゲームに近いリアルタイム処理''' です。 2015年当時のブラウザでは不可能でした。 ----- <span id="そこで出てきた技術が-electron"></span> = 3. そこで出てきた技術が Electron = Microsoft(というより元々はGitHub/Atomチーム)は、<br /> 当時こう判断しました: <blockquote>「ブラウザは理想だが、ブラウザのままではIDEにならない」 </blockquote> そこで採った解決策が: <pre>ブラウザをOSアプリにしてしまう</pre> これが Electron です。 Electronの本質は: * 描画はWeb * だが OS API を直接使える つまり<br /> '''“未来のブラウザを先取りした擬似環境”''' です。 ----- <span id="なぜ先にweb型を作れなかったのか"></span> = 4. なぜ「先にWeb型」を作れなかったのか = 最大の障壁は1つです。 <span id="ターミナルこれが決定的"></span> == ターミナル(これが決定的) == VS Code が単なるエディタではなく IDE として成立した理由は<br /> 「統合ターミナル」です。 しかし当時のブラウザは: * pty 接続できない * バイナリストリーム弱い * 遅延大 * 切断が頻発 つまり '''SSHクライアントすら安定しなかった時代''' です。 したがって: Web版 VS Code = 理論上可能<br /> 実用 = 不可能 でした。 ----- <span id="状況を変えた技術"></span> = 5. 状況を変えた技術 = 2017?2021年に、ブラウザ側で革命が起きます。 登場したもの: * WebSocket安定化 * WebAssembly * SharedArrayBuffer復活 * Service Worker * 高速JS JIT * GPUアクセラレーション * xterm.js の成熟 これによって初めて: <pre>ブラウザがローカルアプリ並みの応答性</pre> に到達しました。 この時点で<br /> '''Web版 VS Code が「現実の選択肢」になりました。''' ----- <span id="実は-microsoft-自身も同じ結論に到達した"></span> = 6. 実は Microsoft 自身も同じ結論に到達した = 現在の流れを見てください。 * vscode.dev * github.dev * Codespaces * Remote-SSH これはすべて: <pre>UI = ブラウザ 実行 = サーバ</pre> です。 つまりあなたの疑問: <blockquote>「なぜ最初からそうしないのか」 </blockquote> 答えは: <blockquote>できるようになったのが最近だから </blockquote> です。 ----- <span id="なぜ今でも-electron版が残るのか"></span> = 7. なぜ今でも Electron版が残るのか = ここも重要です。 Web版 VS Code は万能ではありません。<br /> まだ弱点があります: * オフライン * ローカルビルド * 巨大リポジトリ * ネイティブデバッガ * カーネル開発 * デバイス開発 これらは依然としてローカルアプリが必要です。 したがって: <pre>Electron版 = ローカル開発用 Web版 = リモート開発用</pre> という住み分けになります。 ----- = 最終的な位置づけ = あなたが考えた構成: <blockquote>ブラウザを入出力、サーバを開発環境 </blockquote> これは現在では<br /> '''VS Code が到達しつつある最終形にかなり近い発想''' です。 ただしそれは設計思想が優れていたから先に実装されたのではなく、 * ネットワーク * ブラウザ * JavaScriptエンジン * Web技術 がようやく追いついた結果です。 つまり Electron は遠回りではなく、<br /> '''Web IDEへ到達するための過渡的な足場'''<br /> と見るのが最も正確です。 そしてこの歴史的経緯のため、<br /> FreeBSDは「ローカルIDE」では不利でも<br /> 「リモート開発サーバ」としてはむしろ理想的な位置に入る、という構図になります。 <span id="prompt-10"></span> == Prompt: == けっこう早くにブラウザ側の革命も起きて環境は整ってきていたけど、ひとたびデスクトップ版として開発が始まって動き始めたVS Codeの軸足をどこに置くのかという開発方針を大きく転換することは、なかなか移転コストが高かったし、すぐにWeb型VS Codeに転換するメリットも薄かったということでしょうかね? <span id="response-10"></span> == Response: == はい、その理解はかなり核心に近いです。<br /> ただし正確に言うと '''「移転コストが高かった」だけではなく、当時は“転換する合理性がまだ成立していなかった”''' のです。<br /> つまり単なる保守性や惰性ではありません。むしろ逆で、当時の状況では '''デスクトップ中心の方が合理的''' でした。 順序立てて説明します。 ----- <span id="vs-code-の本当の成功要因"></span> = 1. VS Code の本当の成功要因 = VS Code が爆発的に普及した理由は、エディタ性能でも UI でもありません。 最大の要因はこれです: <blockquote>'''拡張機能(Extension ecosystem)''' </blockquote> 2015?2018年の開発者の現実を思い出すと分かります。 当時の主流 IDE: * Eclipse * IntelliJ * Visual Studio * Xcode 共通点:<br /> '''巨大で重く、言語ごとに分断されていた。''' VS Code はここを壊しました。 なぜ壊せたかというと、拡張が次の前提で書けたからです: <pre>ローカルに Node.js プロセスが存在する</pre> これが決定的でした。 ----- <span id="web版では当時これが成立しなかった"></span> = 2. Web版では当時これが成立しなかった = 当時のブラウザには重大な制限がありました: ブラウザでは: * 任意プロセスを起動できない * ファイルシステムを自由に触れない * ネットワークポートを開けない * デバッガを接続できない つまり当時もし Web 版 VS Code を先に出していたら: '''拡張がほぼ書けません。''' これは致命的です。 なぜなら VS Code の価値は本体ではなく、 <blockquote>Python 拡張<br /> C++ 拡張<br /> Git 拡張<br /> Remote 拡張 </blockquote> にあるからです。 Electron 版が先だった理由はここです。 Electron は: <pre>ブラウザUI + Node.js実行環境</pre> つまり「Web開発者が書けるネイティブアプリ基盤」でした。 これによって拡張作者は: * C++ * Python * Go * Rust * Java 対応を一気に書けたわけです。 もし最初から Web 版だった場合: → 拡張エコシステムは成立しなかった可能性が高いです。 そして VS Code も普及しません。 ----- <span id="転換コストが高かった本当の理由"></span> = 3. 転換コストが高かった本当の理由 = ここが重要です。 VS Code の本体は UI ではありません。 本体は: <pre>Extension Host API</pre> です。 拡張機能の世界には数万のパッケージがあります。<br /> それらは '''Electron の挙動を前提に書かれている''' のです。 したがって「Web化」は単に UI を変える話ではなく: <blockquote>世界中の拡張機能の実行モデルを変更する </blockquote> ことになります。 これは OS 移植より大きな問題です。 ----- <span id="なぜ今-web-へ移行できるようになったか"></span> = 4. なぜ今 Web へ移行できるようになったか = ここが面白いところです。 Microsoft は方向転換したのではありません。<br /> '''拡張の実行場所を移動させた''' のです。 以前: <pre>拡張 → ローカル PC で動作</pre> 現在: <pre>拡張 → リモートサーバで動作 UI → ブラウザ</pre> つまり Web 版 VS Code は、 「Web IDE」ではなく <blockquote>'''クライアントがブラウザになったリモート IDE''' </blockquote> です。 この発想の転換が Remote-SSH や Codespaces です。 これにより: * 拡張の互換性を壊さない * Web化できる * 移行コストを回避 が同時に成立しました。 ----- <span id="なぜ当時すぐ転換しなかったか"></span> = 5. なぜ当時すぐ転換しなかったか = 整理すると理由は3つあります。 <span id="技術的未成熟"></span> === (1) 技術的未成熟 === ブラウザの性能・通信・端末が不足 <span id="エコシステム破壊リスク"></span> === (2) エコシステム破壊リスク === 拡張互換性が崩れる <span id="必要性がなかった"></span> === (3) 必要性がなかった === これが意外と大きいです。 2015年当時の開発は: * ローカルPC開発 * ノートPC主体 * クラウドCIは補助 でした。 つまり '''Web IDEの需要がまだ弱かった。''' 現在は違います。 * コンテナ * クラウド開発 * リモートサーバ * GPUサーバ これにより「ローカルで開発しない」状況が増えました。 ここで初めて Web 型の合理性が強くなりました。 ----- <span id="したがってあなたのまとめはほぼ正しい"></span> = 6. したがってあなたのまとめはほぼ正しい = ただ、より正確に言い直すとこうなります。 <blockquote>VS Code はデスクトップ版に固執したのではなく、<br /> '''拡張エコシステムを壊さずに Web 化できる時期を待っていた。''' </blockquote> そして技術・市場・クラウドの条件が揃ったため、<br /> 現在ようやく Web へ軸足を移し始めている段階です。 ----- = 最後に = ここまでの話を FreeBSD の視点に戻すと重要な意味が見えます。 FreeBSDが苦しいのは: 「ローカル IDE プラットフォーム」 としての役割です。 しかし VS Code が向かっている方向は: <blockquote>IDE = クライアント<br /> 開発環境 = サーバ </blockquote> です。 このとき FreeBSD は不利どころか、<br /> '''むしろ適した位置に入る可能性が出てきます。''' つまり現在あなたが感じている構図の変化は、<br /> 単なる使い方の工夫ではなく、<br /> IDEのアーキテクチャそのものの変化に対応したものです。 <span id="prompt-11"></span> == Prompt: == なかなかいい勉強になりました。ありがとうございます。 <span id="response-11"></span> == Response: == どういたしまして。<br /> かなり抽象度の高い話でしたが、論点の押さえ方が的確だったのでこちらも説明しやすかったです。 最後に、今回の議論を一行で整理しておきます: <blockquote>'''FreeBSDがVS Codeに弱いのではなく、「ローカルGUI IDE」という役割に弱いだけで、<br /> VS Codeが向かっている“リモート開発基盤のサーバ側”という役割にはむしろ適性がある。''' </blockquote> つまり * Electron版 VS Code → FreeBSDでは無理が出やすい * ブラウザ+サーバ型 VS Code → FreeBSDと相性がよい という構図です。<br /> これは回避策ではなく、IDEの進化方向と偶然一致している、という位置づけになります。 もし今後、実際に<br /> 「FreeBSDを開発サーバにして、ブラウザから使う構成(code-server / Remote-SSH など)」<br /> を組む段階になったら、かなり具体的なチューニング点(pty、ログインシェル、locale、ファイル監視、ZFSまわりの挙動など)で差が出てきます。そこは実用性に直結する部分なので、必要になったらいつでも相談してください。 ----- Powered by [https://www.chatgptexporter.com ChatGPT Exporter]
FreeBSDとElectronとVS Codeについて
に戻る。