の発売 プロジェクトの新しいバージョン 「コスモポリタン2.0」は、標準の C ライブラリと、インタープリターや仮想マシンを使用せずにさまざまなオペレーティング システム用のプログラムを配布するために使用できるユニバーサル実行可能ファイル形式を開発しています。
コンテナ ユニバーサル実行可能ファイルを生成する 異なるシステムからの特定のセグメントとヘッダーの組み合わせに依存しています オペレーティング システムを XNUMX つのファイルにまとめ、Unix、Windows、および macOS で使用される複数の異なる形式を組み合わせます。
それを確保するために 単一の実行可能ファイル システム上で実行 Windows と Unix、 Windows PE ファイルをシェル スクリプトとしてエンコードするトリックが使用されます。 これは、トンプソン シェルが「#!」スクリプト マーカーを使用しないという事実を利用しています。
複数のファイルを含む (すべてのリソースを XNUMX つのファイルに結合する) プログラムを作成するために、特別に細工された ZIP アーカイブの形式で実行可能ファイルを生成することがサポートされています。 提案された形式の概要 (例 hello.com アプリケーション):
qemu-x86_64 呼び出しは、追加の移植性のために提供されています また、x86_64 アーキテクチャ用にコンパイルされたコードを、Raspberry Pi ボードや ARM プロセッサを搭載した Apple デバイスなど、x86 以外のプラットフォームで実行できるようにします。 このプロジェクトを使用して、オペレーティング システム (ベア メタル) なしで動作するスタンドアロン アプリケーションを作成することもできます。 このようなアプリケーションでは、ブートローダーが実行可能ファイルに添付され、プログラムは起動可能なオペレーティング システムとして機能します。
コスモポリタン2.0の主な新機能
この新しいバージョンでは、次のことが強調されています。 内部リソースにアクセスするためのスキーマが変更されました デントロ zipファイルから (ファイルを開くとき、zip:.. プレフィックスを使用する代わりに、通常の /zip/… パスが使用されるようになりました)。 同様に、Windows でディスクにアクセスするには、「C:/…」の代わりに「/c/…」のようなパスを使用できます。
新しいAPEローダーが提案されています (Actally Portable Executable) は、ユニバーサル実行可能ファイルの形式を定義します。 新しいブートローダー mmap を使用してプログラムをメモリに割り当てます その場でコンテンツを変更することはもうありません。 必要に応じて、ユニバーサル実行可能ファイルを個々のプラットフォームに関連付けられた通常の実行可能ファイルに変換できます。
Linux では、binfmt_misc カーネル モジュールを使用できます。 APE プログラムを実行します。 binfmt_misc の使用が最速の起動方法であることに注意してください。 の実装 C、C++、Python、および Redbean プログラムで呼び出しデータを使用するための API と、promise.com のユーティリティを提供するだけでなく、OpenBSD プロジェクトによって開発された pledge() および unlock() システム コールの機能任意のプロセスを分離します。
私達はまたそれを見つけることができます Linux では、clock_gettime および gettimeofday 呼び出しのパフォーマンスが向上しました。 vDSO (仮想動的共有オブジェクト) メカニズムの使用により、最大 10 回。これにより、システム コール ハンドラーをユーザー空間に転送し、スイッチ コンテキストをバイパスできます。
ビルドは Landlock Make を使用しますは、GNU Make のエディションであり、より厳密な依存関係チェックと Landlock システム コールを使用してプログラムをシステムの残りの部分から分離し、キャッシュ効率を向上させます。 オプションとして、コンパイラ機能と通常の GNU Make が保持されます。
一方、それはまた、 マルチスレッド用に実装された関数: _spawn() および _join(), これは、さまざまなオペレーティング システムの特定の API に対するユニバーサル バインディングです。 POSIX スレッドのサポートを実装する作業も進行中です。
目立つ他の変更のうち:
- すべての関数とシステム コールに関する情報を stderr に送信するために、「–ftrace」および「–strace」オプションのサポートが実行可能ファイルに追加されました。
- Linux 5.9 以降、FreeBSD 8 以降、および OpenBSD と互換性のある closefrom() システム コールのサポートが追加されました。
- 複素数を扱う数学関数は、Musl ライブラリから移動されました。
- 多くの数学関数が高速化されました。
- ネットワーク機能を無効にする nointernet() 関数が提案されています。
- 文字列を効率的に追加するための新しい関数が追加されました: appendd、appendf、appender、appends、appendw、appendz、kappendf、kvappendf、および vappendf。
- 昇格された特権で動作するように設計された関数の kprintf() ファミリの保護されたバージョンが追加されました。
- SSL、SHA、curve25519、および RSA 実装のパフォーマンスが大幅に向上しました。
最後に、それについてもっと知りたい場合は、プロジェクト コードを知っておく必要があります。またはISCライセンスの下で配布されています (MIT/BSD の簡易版)。