- SwiftはAppleプラットフォーム以外にも、LinuxやWindowsなどをサポートしている
- Swift Static Linux SDKを使うと、外部依存なしで完全に静的リンクされた実行ファイルをビルドできる
- これはすべてのLinuxディストリビューションで実行可能
- macOSで開発・テストした後、Linuxベースのサーバーにデプロイできる
- リンキングは、コンピュータープログラムの別の部分を取り込み、参照を接続する過程
- 静的リンクはビルド時に、動的リンクはランタイム時に発生する
- 静的ライブラリは個別のオブジェクトファイルの集合であり、動的ライブラリはmonolithicである
- 静的リンクの長所と短所:
- 長所: ランタイムオーバーヘッドがない、必要なライブラリコードだけを含む、別途インストールされた動的ライブラリが不要、ランタイムのバージョン問題がない
- 短所: コード共有ができない(メモリ使用量が増加)、プログラムを再ビルドせずに依存関係を更新できない、実行ファイルサイズが増える
- Linuxで静的リンクを使うと、ディストリビューションごとのシステムライブラリ依存性を完全に取り除ける
- swift.orgでOpen Sourceツールチェーンをインストールする必要がある(Xcode付属のツールチェーンは使用不可)
swift sdk install コマンドでStatic Linux SDKをインストールできる
swift build --swift-sdk x86_64-swift-linux-musl コマンドでx86-64 Linuxバイナリを、swift build --swift-sdk aarch64-swift-linux-musl コマンドでARM64 Linuxバイナリをビルドできる
- FoundationやSwift NIOを使うSwiftパッケージはそのまま動作する
- Cライブラリを使うパッケージは、Glibcの代わりにMuslをimportするよう修正する必要がある
- Muslは静的リンクをよくサポートし、実行ファイルの配布が容易なpermissiveライセンスを持つ
swift package edit コマンドでパッケージ依存関係を修正できる
2件のコメント
これを使って、SwiftでAndroidとiOSの同時開発をよりシームレスに支援する何かが出てきそうな感じがする…
Hacker Newsの意見
Swiftの新しいカスタムプラットフォーム対応: Swiftが組み込みシステムとWASMをサポートし、Apple以外のGitHub組織へ移行したことは、Swiftを他プラットフォームへ拡張する大きな前進。AI OSのセキュリティ検証にも使われる可能性があるのは興味深い。
SwiftバイナリをAlpineコンテナで実行可能: SwiftバイナリをAlpineコンテナで実行できるようになってうれしい。musl対応の作業は予想より早く進んでいる。クロスコンパイルも非常に有用。
Debian対応への期待: DebianでSwiftパッケージが追加されるのを見られてうれしい。開発VMとしてDebianをより多く使うようになりそう。
組み込みシステムでのSwift利用への期待: これまでCで組み込みシステムを多く扱ってきたが、STM開発ボードでSwiftを試してみたい。
静的リンクの欠点: ASLRが適切に機能しない、または1つのオブジェクトだけがランダム化される。メモリ安全な言語では大きな欠点ではないかもしれない。共通オブジェクトを共有すればI/O削減の効果がある。
ディストリビューション間の互換性問題: 特定のディストリビューションやバージョンでビルドされたプログラムが、別のディストリビューションで動作しないことがある。Swiftが静的リンクを提供するのはよいが、ディストリビューションがパッケージ配布方法を選べるのが最善。
Golangとの競争可能性: Swiftは配布の容易さという面でGolangと競争できそう。複雑さをエンドユーザーから遠ざけられる。
クロスプラットフォームGUIアプリ: SwiftでクロスプラットフォームGUIアプリを作るとどうなるのか気になる。SwiftUIは使えなさそうだが、Swiftを簡単なスクリプト作成に使うつもり。
CentOS 7イメージ使用への警告: CentOS 7イメージをまだ提供しているのは正気とは思えない。使わないようにという警告。
Swiftの複雑性増大: Swiftは簡単にPythonを置き換えられたはずだが、言語が複雑になり、今ではC++の亜流になってしまった。
Rustの代わりにSwiftを使う理由: なぜRustではなくSwiftを使うべきなのか、という疑問。
iOS/SwiftUIなしでSwiftを使う理由: iOS/SwiftUIなしでSwiftを使う理由があるのか、という疑問。Swift開発者が小さなプロジェクトで慣れた言語を使いたい場合を除けば、理由はなさそう。