-
Notifications
You must be signed in to change notification settings - Fork 0
MS_LinuxSubsystem
- 戻る(Windows上で動くLinux)
- Linuxサブシステム
- Windows Subsystem for Linux
- コンテナ技術
エミュレーション環境(互換レイヤ)には、
- POSIX, OS/2 サブシステム
- Cygwin / MinGW / MSYS2
- Windows Subsystem for Linux
などがある。
補足(3 世代の位置づけ): 並列に見えるが、実際には
Windows が Linux 互換をどう扱ってきたかの歴史でもある。
世代 方式 立ち位置 POSIX / SFU / SUA OS のサブシステムとして実装 Microsoft 純正。全て廃止 Cygwin / MinGW / MSYS2 ユーザーランドの互換 DLL サードパーティ。現在も現役 WSL 1 OS のサブシステム(システム コールを翻訳) 純正の再挑戦 WSL 2 本物の Linux カーネルを軽量 VM で動かす 互換を諦めて実物を載せた WSL 2 で「翻訳」を諦めて実際の Linux カーネルを載せたのは、
互換レイヤでは追随しきれないという結論に達したためである。
この流れを踏まえると、各方式の得手不得手が理解しやすい。
-
Windows には、POSIX や OS/2 といったサブシステムが提供されていた。
- サブシステムに準拠したアプリケーションを実行することができた
(POSIX は再コンパイルが必要、OS/2 は 16bit 版の CUI アプリがそのまま実行可)。 - これらのサブシステムは Windows XP で廃止された。
- サブシステムに準拠したアプリケーションを実行することができた
-
その後、UNIX 環境との相互運用サブシステムが提供されたが、
現在では提供されていない。- Services for UNIX、Subsystem for UNIX-based Applications
- また、その上で動作するアプリケーションが提供されていた
(NFS サーバ、ゲートウェイなど)。
補足(なぜサブシステムがあったのか): Windows NT は当初から
「複数のサブシステム(Win32 / POSIX / OS/2)が
共通のカーネルの上に載る」というアーキテクチャで設計されていた。
POSIX サブシステムは、米国政府調達の要件(FIPS 151-2)を満たすために
最小限の実装が用意されたという事情がある。
実用性は乏しく、廃止されたのは自然な流れであった。
- 参考
- UNIXとWindowsとの共存
https://www.nic.ad.jp/ja/materials/iw/2003/proceedings/T23.pdf
- UNIXとWindowsとの共存
- POSIX 互換レイヤーがオーバーヘッドを生じる
- ディレクトリ構造が Windows とも UNIX とも異なってしまう
- オリジナルの MSYS はほぼ開発が止まっているので、
代わりに、下記の「Git for Windows」を利用する。
- Windows 上に、Linux や UNIX の完全な POSIX 層を提供することを目標にしている。
- 互換性のために必要であれば性能も犠牲にしている。
- Cygwin 1.3.3 からフォークした。
- フリーのコンパイラと各種ツールのみを提供し、性能を重視している。
- Microsoft から直接提供されるライブラリ
msvcrt.dllを用いている。 - このため、POSIX API を提供していない。
- プラットフォーム非依存のライブラリを使用してアプリケーションを
作成する必要がある。 - ネットワークプログラミングの
read/writeを、
recv/sendに置き換える必要がある。
- プラットフォーム非依存のライブラリを使用してアプリケーションを
-
MinGW を補う目的で作られた。
-
プログラム開発の用途に限定的。
-
ツールを統合したパッケージ
- Unix シェル(Bash)
- テキスト操作ユーティリティ(gawk, sed, findutil)
- ソースコードパッチ用ツール(diffutil)
- アーカイブツール(tar, bzip2, zlib)
移行メモ(正誤): 元ページは「オリジナルの MSYS2 はほぼ開発が
止まっている」としているが、開発が止まったのは MSYS(MinGW 付属の
旧世代)であり、MSYS2 は現在も活発に開発されている
(pacmanによるパッケージ管理を備え、
MinGW-w64 ツールチェーンの標準的な配布経路になっている)。
上記本文はこれに合わせて「MSYS」と訂正した。
- MSYS に最新のセキュリティパッチを適用した上で、
Windows 向けの Git ツールを追加したもの - この Git Bash は、MSYS2 の一部を取り込んだ形で構成されており、
内部的には MINGW64 を使用
補足(使い分けの目安): 現在の実務での選び方は概ね次のとおり。
目的 選ぶもの Linux の開発環境が欲しい(ビルド・テスト・Docker) WSL 2 Windows ネイティブな exe を GCC で作りたい MSYS2 / MinGW-w64 Git と最低限の Unix コマンドだけ欲しい Git for Windows(Git Bash) 既存の POSIX ソースを Windows exe として動かしたい Cygwin 「Windows のパスをそのまま扱えるか」「生成物が Windows ネイティブか」
という 2 軸で分かれると考えると整理しやすい。
-
Tech TIPS:【総まとめ】Windowsコマンドプロンプトの入門から使いこなしまでの記事 - @IT
http://www.atmarkit.co.jp/ait/articles/1505/28/news031.html -
MSYS2
https://www.msys2.org/ -
Cygwin
https://www.cygwin.com/
Tags: 移行, Windows, Linuxサブシステム, Linux
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。