この記事の要点
- Swift がオープンソースとして公開されると同時に、Linux 上で動作する移植版(Linux port)も提供されました。Swift のソースからビルドするか、Ubuntu 向けのビルド済みバイナリをダウンロードして利用できます。当時の対応アーキテクチャは Linux 上の x86_64 のみです。
- この移植版の最大の特徴は、Objective-C ランタイムに依存しないことです。Swift 言語のコアと標準ライブラリ、
Glibcを介した C 標準ライブラリ、LLDB によるデバッグと REPL、Swift Package Manager が利用できます。 - 一方で、Objective-C ランタイムや
NSStringのブリッジに依存していた一部の機能(ランタイムリフレクション、一部のStringAPI、コンテナ型のキャストなど)は、当時はまだ動作しないか今後の課題でした。
何が発表されたのか
オープンソース化された Swift プロジェクトの一部として、Linux で動作する移植版が公開されました。Swift のソースから自分でビルドすることも、Ubuntu 向けのビルド済みバイナリをダウンロードして使うこともできます。この移植版は当時まだ作業途中でしたが、試験的な利用には十分使えるものとして提供されました。対応アーキテクチャは Linux 上の x86_64 のみです。
この Linux port を支える設計上の前提が、Objective-C ランタイムに依存しないという点です。Swift は Objective-C が存在する環境では密に連携するよう設計されていますが、同時に Objective-C ランタイムが存在しない環境でも動作するよう設計されていました。Linux port はその後者を実際に動かすものです。
何に使えるのか
当時の Linux port で動作する主な要素は次のとおりです。
- Objective-C ランタイムなしの Swift: Linux 上の Swift は Objective-C ランタイムに依存せず、それを含みもしません。
- コア言語と標準ライブラリ: Linux 上でも、Apple プラットフォームとほとんど同じ実装・API を共有します。ただし Objective-C ランタイムがないことに由来する挙動の差異が一部あります。
-
Glibcモジュール: Apple プラットフォームのDarwinモジュールに相当し、Linux の C 標準ライブラリの大部分をimport Glibcで利用できます。tgmath.hなど一部のヘッダはまだ取り込まれていませんでした。import Glibc - Swift Core Libraries: Objective-C なしで使える Foundation・XCTest のコア API 実装を提供します。Apple プラットフォームでも Linux でも、同じ API をクロスプラットフォームに使えるようにすることを意図しています。
- LLDB によるデバッグと REPL: macOS と同様に、Swift バイナリのデバッグや REPL での実験ができます。
- Swift Package Manager: Apple プラットフォームと同じく、第一級の存在として利用できます。
一方、当時まだ動作しないか、今後の対応が予定されていた項目もありました。
- libdispatch: Core Libraries の一部で、Linux 対応が進行中でした。
- 一部の C API: 可変長引数(varargs /
va_list)を含む構文など、まだ Swift に取り込まれていない C の構文があり、対応する API が利用できませんでした。なお当時、名前付き/無名 union、無名 struct、ビットフィールドへの対応など、C との相互運用は大きく進展していました。 - 一部の
StringAPI: 標準ライブラリのStringのいくつかの重要な API は、Apple プラットフォームのNSString実装に結び付いていたため、欠けていました。 - ランタイムリフレクション: Apple プラットフォームで
@objcの付いたクラスやNSObjectのサブクラスに対して Objective-C ランタイムを使って行えるメソッド列挙やセレクタ経由の呼び出しは、Objective-C ランタイムに依存するため利用できませんでした。 Array<T> as? Array<S>: 異なる associated type を持つコンテナのキャストなど、Objective-C とのブリッジに依存していた仕組みは動作しませんでした。
導入・今後の位置づけ
この Linux port は、オープンソース化と同時に「Linux でも今すぐ試せる」状態を提供するものでした。当時はまだやるべきことが多く残っており、Linux port をより完全なものにするためのコントリビューションが呼びかけられていました。
その後 Swift はクロスプラットフォーム展開を着実に進めており、現在では Linux はもちろん、Windows や Android なども公式にサポートされています。この記事は、その出発点として Swift がオープンソース化された 2015 年時点での Linux 対応状況を伝える歴史的な記録として読めます。