オルタナティブ・ブログ > Mostly Harmless >

IT技術についてのトレンドや、ベンダーの戦略についての考察などを書いていきます。

SQL ServerをLinuxで動かした技術が結構凄かった件

»

昨年、MicrosoftのSQL ServerがLinuxに対応したことについて、主にMicrosoftの戦略面から見たブログ記事を投稿しました。

Linux に対応したSQL Server - その狙いと意味

その中で、移植方法についてTechCrunchの記事を引用して

ところでこの記事には、巨大なSQL ServerをどうやってLinuxに移植したかについて、Drawbridgeという技術を使ったことが述べられています。「アプリケーションのサンドボックス化のための新しい仮想化の形態(new form of virtualization for application sandboxing)」とあり、コンテナみたいなものなのかも知れません。これはこれで面白そうな技術なのですが、今回はこれについては触れません。

と触れていますが、このときは時間も無かったので詳しくは調べませんでした。ところが、その後いろいろな記事を読む中で、これ、実は結構凄いことをしているらしいことがわかってきました。なんと、「移植」ではなく、SQL Serverの「Windows用バイナリ」をそのままLinuxで動かしているのだそうです。

SQL Server on Linux についての個人的な所感

この中で、

SQL Server on Linux は Linux 上で動作する SQL Server となります。
Linux 向けの SQL Server を新規に開発したかというと、そういうことではありません。
「Windows 版の SQL Server を Linux 上で実行する」というアプローチが基本となっています。

と書いてあります。どうしたらそんなことが? しかも、「品質、セキュリティ、機能性、性能、および拡張性は、Windows上のSQL Server で実現しているものと同水準を満たす」というのです。

container_kontenasen.png

秘密はOSを包含したマイクロコンテナ

よく読んでみると、元のTechCrunchの記事にちゃんと書いてあります。しかし、

小さなAPIを対外的インタフェイスとして提供するコンテナ、その中では、アプリケーションを効率的に動かせるよう構成されたベーシックなバージョンのWindowsが動く。

と言われても、何のことやらわかりません。私も、これこれ、そしてこれなど、いろいろな記事を読んでからこの記事に戻ってきて、ようやくわかりました。

私なりの理解を書くと、

Windowsのプロセスと、その動作に必要なWindows OSのライブラリをPicoprocessとしてコンテナ化することでOSの違いを吸収し、Linux上でWindowsアプリを動作させる

というものです。要するに、WindowsをバラしてSQL Serverと抱き合わせにしてLinuxの上に乗っけてしまったようなものですね。荒技といえましょう。

DrawBridgeは元々、新しい仮想化の形態を模索するためのプロジェクトだったようで、PicoprocessとLibrary OSという2つのアイデアがベースとなっています。こちらの記事によると、Picoprocessは

最小限のカーネル API Surface を持ったプロセス ベースの分離コンテナで、プロセス空間内には包含された OS を持っています。

ということです。この包含されているOSというのがLibrary OSで、ここがミソですね。これ、名前はPicoprocessということでプロセスなんですが、解説する文章にはサンドボックスとかコンテナとかいろいろ書いてあり、一貫していません。外部と隔離された環境であることから「サンドボックス」と呼んでいるようですが、サンドボックスというとセキュリティの関係を思い出してしまうので、コンテナの方がしっくりくるような気がします。これをベースにして、新しいPAL(Platform Abstruction Layer)を作ることでSQL Server on Linuxが実現したと言うことです。しかし、パフォーマンスやスケーラビリティなどの面では遜色が無いということですので、ただ単にWindowsを仮想化して載せるのとは違うということでしょう。

WSL(Windows Subsystem for Linux)もPicoprocessを使用

Picoprocessを調べていたら、少し前に「LinuxのバイナリがWindows上で動く!」と話題になったWSLに行き着きました。なんと、WSLでもPicoprocessが使われていたのですね。SQL Serverとちょうど逆のことをやっているようです。

Windows Subsystem for Linuxの中身を詳しく見る

WSLは、Windwos上でWSLを有効にしてその上にLinuxをそのままインストールするということになるらしいので、仮想化に近いのかと思いましたが、この記事を読むと少し違うようです。Windows環境との親和性という意味では、仮想化よりも勝っているようですね。

以下の記事も面白そうです。PicoprocessはWindows10の標準機能として組込まれているようです。

Linux を食べた Windows

Windowsは、Linuxのバイナリも動かせる万能プラットフォームになるのかも知れないということですね。まだちゃんと読めていませんが、自分用の備忘録としてリンクを張っておきます。

普通はソース統合して各プラットフォーム用にバイナリを作成するのが一般的

普通、ソフトウェアをマルチプラットフォーム化する際には、ソースコードを統合してプラットフォーム依存部分を1ヶ所に集め、各プラットフォーム用のバイナリを作成するのが一般的でしょう。先日書いた、Officeのソース統合はそのようにした筈です。(ワンソース・マルチプラットフォーム)

Officeのソースコード統合から見えるMicrosoft の夢と野望

これはこれで大変な作業であることは間違いありません。記事の中でも触れていますが、何度も失敗したあげく、今回も2008年から10年もかけてやっと統合できたのです。

しかし、DrawBridgeの発想は、次元が違います。ソースコードの統合ではなく、同じ「バイナリ」がマルチプラットフォームで動くと言うことだからです。(まあ、同じIntelバイナリ同士だからできているということもあります。そういえば、Microsoftはx86バイナリをARMで動かそうともしていますね。あちらのほうはどうなったのか?)

SQL Serverではスケジューラやメモリ管理がSQL Server内に実装されており、機種依存の度合いの高いUI部分がほとんど無い、といった特殊事情もあるようですが、ソフトウェアのマルチプラットフォームについての画期的な技術であることは間違いないでしょう。

Microsoftにしかできない?

しかし、よく考えてみると、Windowsをバラして使うなどという方法はWindowsのソースを持っているMicrosoftだからできることで、他社には無理ですよね。(これを標準機能として出さない限り)逆に言えば、Microsoftは他社に対する大きなアドバンテージを持ったことにもなります。今後この技術がどのように発展していくのか、興味深いところです。

Comment(1)