Skip to content

MS_LinuxSubsystem

nishi_74322014 edited this page Aug 12, 2026 · 1 revision

Linuxサブシステム

概要

エミュレーション環境(互換レイヤ)には、

などがある。

補足(3 世代の位置づけ): 並列に見えるが、実際には
Windows が Linux 互換をどう扱ってきたかの歴史でもある。

世代 方式 立ち位置
POSIX / SFU / SUA OS のサブシステムとして実装 Microsoft 純正。全て廃止
Cygwin / MinGW / MSYS2 ユーザーランドの互換 DLL サードパーティ。現在も現役
WSL 1 OS のサブシステム(システム コールを翻訳 純正の再挑戦
WSL 2 本物の Linux カーネルを軽量 VM で動かす 互換を諦めて実物を載せた

WSL 2 で「翻訳」を諦めて実際の Linux カーネルを載せたのは、
互換レイヤでは追随しきれないという結論に達したためである。
この流れを踏まえると、各方式の得手不得手が理解しやすい。

詳細

POSIX, OS/2サブシステム

  • 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)を満たすため
最小限の実装が用意されたという事情がある。
実用性は乏しく、廃止されたのは自然な流れであった。

Cygwin/MinGW/MSYS2

  • POSIX 互換レイヤーがオーバーヘッドを生じる
  • ディレクトリ構造が Windows とも UNIX とも異なってしまう
  • オリジナルの MSYS はほぼ開発が止まっているので、
    代わりに、下記の「Git for Windows」を利用する。

Cygwin

  • Windows 上に、Linux や UNIX の完全な POSIX 層を提供することを目標にしている。
  • 互換性のために必要であれば性能も犠牲にしている。

MinGW

  • Cygwin 1.3.3 からフォークした。
  • フリーのコンパイラと各種ツールのみを提供し、性能を重視している。
  • Microsoft から直接提供されるライブラリ msvcrt.dll を用いている。
  • このため、POSIX API を提供していない。
    • プラットフォーム非依存のライブラリを使用してアプリケーションを
      作成する必要がある。
    • ネットワークプログラミングの read/write を、
      recv/send に置き換える必要がある。

MSYS2

  • MinGW を補う目的で作られた。

  • プログラム開発の用途に限定的。

  • ツールを統合したパッケージ

    • Unix シェル(Bash)
    • テキスト操作ユーティリティ(gawk, sed, findutil)
    • ソースコードパッチ用ツール(diffutil)
    • アーカイブツール(tar, bzip2, zlib)

移行メモ(正誤): 元ページは「オリジナルの MSYS2 はほぼ開発が
止まっている」としているが、開発が止まったのは MSYS(MinGW 付属の
旧世代)であり、MSYS2 は現在も活発に開発されている
pacman によるパッケージ管理を備え、
MinGW-w64 ツールチェーンの標準的な配布経路になっている)。
上記本文はこれに合わせて「MSYS」と訂正した。

Git for Windows

  • 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 軸で分かれると考えると整理しやすい。

参考


Tags: 移行, Windows, Linuxサブシステム, Linux

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally