ローエンド編集部:Linuxディストリビューションとオペレーティングシステムは時代遅れ?ワンクリックVPSアプリのインストールでWebへの移行は完了?

ハードウェアエンジニアの友人がいます。彼に会うたびに、自分が使っているノートパソコンやサーバーのハードウェア内部でどれだけのことが起こっているのか、考えさせられます。でも、ハードウェアに「あまり注意を払わない」ということもあります。最近は、ほとんどの人がそうではないでしょうか?
少し前に、若い友人とフロントエンドエンジニアリングと最新のWebアプリケーションについて話していました。オペレーティングシステムの話になった時、若い友人は「抽象化したい」とだけ言いました。この言葉がずっと頭から離れません。「抽象化したい」というのは、「あまり気にしない」の丁寧な言い方なのでしょうか?
数年前、ポール・ヴィクシー氏の講演に出席しました。彼のプレゼンテーションは、暗号化が普遍的に普及したことにより、インターネットが「ダムパイプ」になりつつあるというものでした。彼は、誰かのコンピュータ利用状況の監視は、暗号化前か復号後かを問わず、エンドポイントで行う必要があると示唆しました。これは、ネットワーク伝送の内容が「抽象化」される可能性を示唆しているのでしょうか?現代のネットワークの「ダム化」は、私たちがハードウェアにこれまで以上に直接的に注意を向ける必要があることを意味しているのでしょうか?
Linux ディストリビューションは素晴らしい!
読者の皆さんと同じように、私も長年にわたり様々なLinuxディストリビューションを使ってきました。それぞれのディストリビューションには素晴らしい点があります。Debianは自由度が高いのが気に入っています。Red HatにはRawhideがあります。Ubuntuは、ハードウェアにプロプライエタリなドライバが必要な場合でも簡単に動作させることができます。Gentooを使えば、システムであらゆるプログラムをコンパイルできることがわかります。Linux From Scratchを使えば、システムの相互作用についてさらに詳しく学ぶことができます。他のディストリビューションにもそれぞれ独自の優れた機能があり、独自のCライブラリ、静的バイナリ、美しいデフォルトGUIなど、他にもたくさんあります。
最近、VPSサービスをご購入いただいた素晴らしいお客様とお仕事させていただいています。その中で気づいたことの一つは、お客様それぞれがLinuxディストリビューションやサーバー設定に関して独自の好みをお持ちだということです。そして、それはそれで良いことなのです!
|– ネットワーク設定
しかし、自分で行ったLinuxのセットアップでは、もちろん突飛なことを試すことができます。その中で私が気づいた突飛なことの一つは、ディストリビューションに依存しないネットワーク設定方法が存在することです。各ディストリビューションにはネットワーク設定用の優れたコマンド群がそれぞれ用意されているにもかかわらず、 iproute2スイートはどのディストリビューションでも使えるようです。そのため、ディストリビューションのネットワークツールではなく、iproute2スイートを使うこともあります。私はディストリビューションのネットワーク部分を「抽象化」してしまったのでしょうか?
|– パッケージシステム
ディストリビューション固有のネットワーク設定に加え、各ディストリビューションには独自の優れたパッケージシステムが備わっています。そのため、同じアプリケーションを異なるディストリビューションにインストールするには、異なるコマンドを使用する必要があります。また、各ディストリビューションのパッケージシステムは、ソフトウェアアプリケーションを他のソフトウェアアプリケーションと異なる方法でグループ化します。
また、同じソフトウェアを異なるパッケージシステムでインストールすると、デフォルト設定が異なります。実際、異なるディストリビューションのパッケージシステム自体が、PerlやPythonなど異なる言語で記述されています。
ディストリビューション固有のパッケージシステムを「抽象化」するにはどうすればよいでしょうか?パッケージシステムを使わずにアプリケーションをインストールするにはどうすればよいでしょうか?少なくとも、静的コンパイル、インタープリタ型言語、コンテナ化といった方法を試すことができます。
静的コンパイル
アプリケーションがさまざまなディストリビューションの異なるライブラリに依存するのではなく、必要なライブラリがアプリケーション自体に提供されるように静的にコンパイルすることで、さまざまなディストリビューションで実行されるアプリケーションを作成できる場合があります。
静的コンパイルの問題の 1 つは、動的リンク用のディストリビューションによって提供されるライブラリの場合のように、ライブラリが通常個別に迅速に更新されないことです。
関連する解決策として、一部の依存関係には静的リンクし、すべての依存関係には静的リンクしないというものがあります。この部分的な静的リンクのアプローチは、有名なyabs.shベンチスクリプトをコンパイルするために使用されるHoly Build Boxで採用されています。
インタープリタ言語
静的コンパイルに加えて、Linuxディストリビューション、さらにはオペレーティングシステムに依存しないアプリケーションのインストール方法として、Java、 Javascript、 Pythonなどのインタープリタ言語が挙げられます。各オペレーティングシステムごとにインタープリタが提供されます。これにより、オペレーティングシステム固有のインタープリタによって、同じアプリケーションコードがあらゆる環境で動作します。
コンテナ化とセルフホスティング
近年、コンテナ化は、異なるLinuxディストリビューションやLinux以外のオペレーティングシステム上でアプリケーションプログラムを正常に動作させるという課題に対する新たな解決策として広く受け入れられるようになりました。コンテナ化プロジェクトの例としては、 LXCやDockerなどが挙げられます。Dockerは非常に人気が高まっています。Dockerコンテナ化は、Linuxディストリビューションやオペレーティングシステムに依存しないアプリケーションのインストールを可能にする、統一されたオペレーティング環境を提供します。
先月、25230 で「What are you self hosting?」というスレッドがありました。このスレッドでは、多くの Docker コンテナでセルフホスティングされている多数のアプリケーションについて議論されました。
数日前、Docker を使用する「アプリケーションおよびデータベースのデプロイメントおよび Web サーバー マネージャー」である CapRoverについて初めて知りました。
LEB では、200 以上のアプリケーションをインストールできる CapRover の驚くべきワンクリック Web インターフェイスを紹介する別の記事を執筆中です。
LEB では、おそらく現在も入手可能な最も古い Linux ディストリビューションであるSlackware Linux に Docker と CapRover をインストールする方法についての 2 番目の記事を計画しています。
Slackware への Docker インストールがディストリビューションに依存しないとしても、驚くには当たらないかもしれません。Docker インストールによって CapRover が Slackware 上で動作し、最古の Linux ディストリビューション上でワンクリック Web インターフェースを使用して 200 以上のアプリケーションをインストールできるようになることを期待しています。
結論の質問
この記事の冒頭で、ハードウェアの抽象化についてお話ししました。Slackware上のDocker内でCapRoverが実行できるようになるということは、Slackware自体が抽象化されたということでしょうか?ディストリビューションに依存しないネットワーク構成と、Webインターフェース経由のOSに依存しないアプリケーションインストールが現実的に可能になるということは、すべてのOSが抽象化されたということでしょうか?CapRoverのWebインターフェースは、ブラウザ以外のすべてが抽象化されたということでしょうか?
追記: ハードウェアに戻る?
Paul Vixie のことを思いながら、私は「Open Firmware のゴッドファーザー」 Ron Minnichが出演する 2019 年 12 月 15 日の Oxide.computer のOn the Metalポッドキャストを何度も聴き返しています。
このポッドキャストでは、ファームウェアの歴史、1990年代後半から2000年代初頭にかけて始まったオープンファームウェアの開発、そして現在のクローズドソースのバイナリBLOBシーンについて、素晴らしい議論が展開されています。54:07でSystem76ラップトップについて触れられ、続いて55:38でChromebookについて触れられています。以下は、55:45あたりから始まるトランスクリプトの抜粋です。System76ラップトップのややオープンなブートシステム、そしてChromebookの検証済みブートシステムについて議論されています。Ron Minnich氏が次のように話しています。
彼らは本当に素晴らしいです。[不明瞭 00:55:48] そうですね。System76の好きなところは、「正しいことをしよう。オープンシステムを構築し、Corebootを動かす。それをどうやってうまく機能させるかを考えよう」というところからスタートし、誰もが辿るのと同じ道を歩んでいるところです。誰かに設計されたものを手に入れ、それを自分のニーズに合わせて機能させるのです。
そこで話を聞いた人たちは、色々な意味で、最新のモデルこそがデザインに大きな影響を与えたと言っていました。そして、それらは単に良い製品だと思います。そういうものを長く使っていると気分が良くなるのですが、さらに、Corebootリポジトリを使ってクローンを作成したり、System76用のファームウェアイメージを作成したり、そのマシンで書き込んだりすることもできます。
ファームウェアに何が書かれているのか信じたくないような会社に勤めているなら、もう一度焼き直せばいいんです。ファームウェアへの攻撃がどれほど恐ろしいものかを分かっている人にとって、これは本当に興味深いことだと思います。System76の本当に素晴らしい点は、メモリ容量やNVMeの容量、そしてどのディストリビューションを使用しているかなど、非常に細かく設定できることです。
Chromebook は、私が長年 Chromebook を使ってきた意見では、電源を入れて警告のない画面が表示されたときに、正しいソフトウェアが実行されていると信じられるものを作ることに完全に成功していると思います。
今、この記事を書いているのはChromebookを使っています。次に新しいノートパソコンが必要になったら、System76などのオープンファームウェアのノートパソコンを検討してみようと思います。ハードウェア抽象化を推し進めていないノートパソコンがあれば、きっと素敵になると思います! :)