【参考訳】LinuxKitの公開：安全、無駄のない、ポータブルなLinuxサブシステム

## 概要

4/18(現地) DockerCon2017 で、Docker から LinuxKit (https://github.com/linuxkit/linuxkit) の公開とオープンソース化の発表がありました。ブログにも該当の解説記事が公開されており、例によって内容の把握用に、雑に訳しました。参考程度に留めて頂ければ幸いです。

原文

- Announcing LinuxKit: A Toolkit for building Secure, Lean and Portable Linux Subsystems - Docker Blog
 - https://blog.docker.com/2017/04/introducing-linuxkit-container-os-toolkit/


## LinuxKit の公開：安全、無駄のない、ポータブルな Linux サブシステム

去年、私たちが皆さんから最も多く頂いたご要望は、Docker 独自の体験を、皆さん自身の環境で行いたいというものでした。プラットフォームは沢山あり、変化に富んでいます。たとえば、AWS や Azure や Google Cloud のようなクラウド・プラットフォームから、Windows Server のようなサーバ・プラットフォームへ、あるいは、開発者が使う OSX や Windows 10 のように開発者自身が使うデスクトップ・プラットフォームへ、あるいはメインフレームや IoT プラットフォーム等々、列挙しきれません。

私たちはこれらプラットフォームのサポートのために動き出しました。そして、まず始めたのが Docker for Mac と Docker for Windows の提供です。続いて、Docker for AWS と Docker for Azure を提供しました。直近では、 [Docker for GCP ベータ](https://blog.docker.com/2017/03/beta-docker-community-edition-google-cloud-platform/) を発表しました。各プラットフォームで Docker をネイティブにするため、Docker エディションごとに取り組みました。

利用者が Linux コンテナのサポートを必要としたため、私たちがあまりにも多くのプラットフォームに対処することが問題の１つでした。しかし、プラットフォーム自身が Linux を提供していない場合もあったのです。Mac OS と Windows は２つの典型的な例です。それだけでなく、クラウド・プラットフォームですら標準的な Linux ではありませんでした。そのため、それぞれの環境に応じて Docker プラットフォームを実行できるよう、Linux をバンドル（同梱）する必要があったのです。

私たちが必要としたのは、安全、無駄なく、ポータブルな Linux サブシステムの同梱でした。すなわち、コンテナ・プラットフォームをコンポーネント（構成物）として、Linux コンテナ機能を提供可能にします。結局のところ、多くの人達がコンテナを使って実行したかったことでした。つまりそれは、コンテナのムーブメントに対して、安全、無駄なく、ポータブルな Linux サブシステムで動くコンテナだったのです。このコンポーネントを構築するため、私たちは複数の企業や Linux Foundation とパートナーを締結しました。企業には HPE、Intel、ARM、IBM、Microsoft が含まれています。いずれも Linux コンテナ機能を、新しい IoT、あるいはメインフレームに至るまで、様々なプラットフォームにもたらすことに関心があります。

LinuxKit にはカスタム Linux サブシステムを構築できる機能が含まれています。つまり、ランタイム・プラットフォームが必要とするコンポーネントしか含んでいません。全てのシステム・サービスはコンテナのため、置き換え可能であり、必要がなくなれば全てを削除できます。つまり、必要があれば全てのコンポーネントを置き換え可能です。これは道具（kit）であり、"batteries included but swappable"（入れ替え可能な電池）という Docker 哲学に非常に一致しています。今日、Dockercon 2017 の舞台上で、LinuxKit を https://github.com/linuxkit/linuxkit でオープンソース化しました。

安全で無駄がなくポータブルな OS という目標を達成するため、これらをコンテナから構築し、コンテナとして使います。安全性は最大の課題であり、NIST がドラフト版のアプリケーション・コンテナ・セキュリティ・ガイドを書き始めました。そこでは次のように書かれています。「一般的な目的の OS に代わり、コンテナに特化した OS を使う目的の１つは、攻撃に直接晒されないようにするためです。コンテナに特化した OS を使うことで、一般的な目的の OS に比べて小さくなるため、コンテナ特化 OS は攻撃に晒される機会を減らし、和らげます」

無駄がなければセキュリティに直接役立つというのは、コンテナを実行する以外の心配が不要なように OS を設計されているためです。LinuxKit はコンテナ・ネイティブのため、 容量は35 MB と非常に小さいサイズであり、ブートにかかる時間を最小にします。全てのシステム・サービスはコンテナですから、すべて削除または置き換え可能なことを意味します。

システム・サービスは、コンテナ内で必要な特権（privileges）のみにサンドボックス化します。設定はコンテナのユース・ケース向けに設計されています。これらシステム全体はイミュータブル・インフラストラクチャとして使われるものであり、CI パイプライン、デプロイ、更新したいときに新しいバージョンの再デプロイにおける構築やテストに使えます。

カーネルの出所は、Linux カーネル・コミュニティと私たちの協調によるものです。[Kernel Self Protection Project(KSPP)](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project)  は特にプロセスと作業に関与しました。LinuxKit がサポートしているプラットフォーム向けに、セキュリティ問題に対処するため、最小限のパッチを適用して直近のカーネルになります。カーネルのセキュリティ対策は小さな会社にとり、自分たちで行うには大きな問題です。それゆえ、大規模な企業との協調が欠かせません。

加えて、LinuxKit ではセキュリティ・プロジェクトのインキュベート（支援）領域も提供します。私たちは [Wireguard](https://www.wireguard.io/) 、 [Landlock](https://lwn.net/Articles/698226/) 、[Mirage](https://mirage.io/) 、 [oKernel](https://github.com/docker/linuxkit/tree/master/projects/okernel)  、 Clear Containers など外部のオープンソース・プロジェクトと動いています。テストベッドの提供や、コンテナ領域やプロダクションに向けての支援のためです。

LinuxKit はポータブルであり、 Docker が現在動く多くの環境でビルドできます。そして、一通り眺めるだけでなく、実行もできます。マシンが大きくても小さくても、ベアメタルでも仮想化されていても、メインフレームやあらゆるデバイス、たとえばインターネット・オブ・シングス(IoT)のシナリオにおいても、コンテナはあらゆる領域のコンピューティングに到達するのです。

立ち上げにあたり、Microsoft の John Gossman を舞台の上に招きました。私たちと Microsoft とは Docker for Windows Server や Docker for Windows 、そして Docker for Azure といった長い間の協調があります。これらのコラボレーションの一環として、Docker for Windows と Docker for Azure での Linux サブシステム開発し、さらに各プラットフォーム上で LinuxKit を Hyper-V で統合するに至りました。次のステップは今日の発表に至るよう協調することであり、Windows Server と Windows 10 利用者が Linux コンテナにアクセスできるようにし、linuxKit と Hyper-V アイソレーション（isolation）をどのように統合するかで働くことでした。

今日私たちは LinuxKit をパートナーやオープンソースの熱心な方向けに、 Linux で新しい何かを開発できるように、そして、コンテナプラットフォームを拡大できるようにしました。私たちは皆さんが何を作るのか、それと、コミュニティにどのように貢献していただけるのか楽しみにしています。

## 原文


- Announcing LinuxKit: A Toolkit for building Secure, Lean and Portable Linux Subsystems - Docker Blog
 - https://blog.docker.com/2017/04/introducing-linuxkit-container-os-toolkit/