Cosmopolitan
Cosmopolitan Libc は、インタプリタや仮想マシンを必要としないことを除けば、C を Java のようなビルドワンスでどこでも実行できる言語にする。その代わりに、Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS上でネイティブに動作するPOSIX公認のポリグロットフォーマットを出力するように、ストックのGCCとClangを再構成し、可能な限り最高のパフォーマンスと想像できる限り小さなフットプリントで動作します。
背景
このプロジェクトの紹介は、actually portable executable ブログ記事と、cosmopolitan libc ウェブサイトをお読みください。APIドキュメントもあります。
はじめに
https://cosmo.zip/pub/cosmocc/ から cosmocc
コンパイラのリリースを入手することから始めることができる。
mkdir -p cosmocc
cd cosmocc
wget https://cosmo.zip/pub/cosmocc/cosmocc.zip
unzip cosmocc.zip
以下はそのプログラム例である:
// hello.c
#include <stdio.h>
int main() {
printf("hello world\n");
}
次のようにまとめることができる:
cosmocc -o hello hello.c
./hello
Cosmopolitan Libcランタイムは、デフォルトでいくつかのヘビー級のトラブルシューティング機能をリンクしている。ここでは、システムコールのログを取る方法を説明します:
./hello --strace
ここでは、関数呼び出しのログをより詳細に取得する方法を紹介する:
./hello --ftrace
Cosmopolitanのツールチェーンを使って、オートツールを使う従来のオープンソースプロジェクトをビルドすることができる。この戦略は通常うまくいく:
export CC=x86_64-unknown-cosmo-cc
export CXX=x86_64-unknown-cosmo-c++
./configure --prefix=/opt/cosmos/x86_64
make -j
make install
Cosmopolitan ソースビルド
Cosmopolitanは私たちがサポートしているどのプラットフォームでもソースからコンパイルすることができます。Makefileは自動的にcosmoccをダウンロードします。
システム全体のAPEローダーをインストールすることをお勧めします。このコマンドはape
コマンドをシステムフォルダにコピーし、Linuxのbinfmt_miscに登録するために、sudo
アクセスが必要です。
ape/apeinstall.sh
GNU Makeの最新バージョンでmonoレポをビルドできるようになりました。cosmoccツールチェーンは互換性が保証されており、さらにビルドシステムのサンドボックス化のための拡張機能も含まれています。
build/bootstrap/make.com -j8
o//examples/hello.com
Cosmopolitanのリポジトリは非常に大きいので、ある特定のものだけをビルドしたいかもしれません。比較的早くコンパイルできるターゲットの例として、LIBCのコアパッケージにのみ依存する単純なPOSIXテストを紹介します。
rm -rf o//libc o//test
build/bootstrap/make.com o//test/posix/signal_test.com
o//test/posix/signal_test.com
時には、個々のターゲットをリストアップすることなく、ターゲットのサブセットをビルドしたいことがあります。例えば、TEST_POSIX
パッケージのすべてのユニットテストをビルドして実行したい場合は、次のようにします:
build/bootstrap/make.com o//test/posix
Cosmopolitanには様々なビルドモードがあります。例えば、本当に小さなバイナリ(12kbほどのサイズ)が欲しいなら、こう言うだろう:
build/bootstrap/make.com m=tiny
さらに、他のオペレーティングシステムの肥大化をカットし、CosmopolitanをMusl Libcにもっと近づけることができる。
build/bootstrap/make.com m=tinylinux
詳細は//build/config.mkを参照のこと。
Debugging
システムコールのログを標準エラー出力する:
cosmocc -o hello hello.c
./hello --strace
関数呼び出しのログを標準エラー出力する:
cosmocc -o hello hello.c
./hello --ftrace
straceもftraceも、解読不可能なkprintf()機能を使用しており、環境変数を設定することでファイルに送信することができる。
export KPRINTF_LOG=log
./hello --strace
GDB
以下は推奨される ~/.gdbinit
の設定です:
set host-charset UTF-8
set target-charset UTF-8
set target-wide-charset UTF-8
set osabi none
set complaints 0
set confirm off
set history save on
set history filename ~/.gdb_history
define asm
layout asm
layout reg
end
define src
layout src
layout reg
end
src
通常はgdbの下で.com.dbg
ファイルを実行する。.com
ファイル自体をデバッグする必要がある場合は、デバッグ・シンボルを以下のように個別にロードすることができる。
gdb foo.com -ex 'add-symbol-file foo.com.dbg 0x401000'
プラットフォームノート
シェル
zsh を使っていて APE プログラムの実行に問題がある場合は、sh -c ./prog
を試すか、zsh 5.9+ にアップグレードしてください(2年前にパッチを当てたので)。Python の subprocess
や古いバージョンの fish などについても同様です。
Linux
Linuxシステムの中には、WINEでMZ実行ファイルを起動するように設定されているものがある。他のディストロでは、APEプログラムが "run-detectors: unable to find an interpreter "と表示されるように、純正インストールを設定しています。例えば
jart@ubuntu:~$ wget https://cosmo.zip/pub/cosmos/bin/dash
jart@ubuntu:~$ chmod +x dash
jart@ubuntu:~$ ./dash
run-detectors: unable to find an interpreter for ./dash
binfmt_misc
でAPEを登録することで修正できる:
sudo wget -O /usr/bin/ape https://cosmo.zip/pub/cosmos/bin/ape-$(uname -m).elf
sudo chmod +x /usr/bin/ape
sudo sh -c "echo ':APE:M::MZqFpD::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register"
sudo sh -c "echo ':APE-jart:M::jartsr::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register"
これで大丈夫だ。APEは動作するだけでなく、実行ファイルの起動も400μ秒速くなる。それでもうまくいかない場合は、次のようにしてbinfmt_misc
を無効にすることもできる:
sudo sh -c 'echo -1 > /proc/sys/fs/binfmt_misc/cli' # remove Ubuntu's MZ interpreter
sudo sh -c 'echo -1 > /proc/sys/fs/binfmt_misc/status' # remove ALL binfmt_misc entries
WSL
通常、WSL環境でAPEを使用するのは安全ではありません。なぜなら、APEはWSL環境内でMZ実行可能ファイルをWIN32バイナリとして実行しようとするからです。WSLでCosmopolitanソフトを安全に使うには、これを実行してください:
sudo sh -c "echo -1 > /proc/sys/fs/binfmt_misc/WSLInterop"
Discordチャットルーム
Cosmopolitan開発チームはRedbean Discordサーバーで共同作業を行っています。ぜひご参加ください! https://discord.gg/FwAVVu7eJ4
Support Vector
Platform | Min Version | Circa |
---|---|---|
AMD | K8 Venus | 2005 |
Intel | Core | 2006 |
Linux | 2.6.18 | 2007 |
Windows | 8 [1] | 2012 |
Mac OS X | 15.6 | 2018 |
OpenBSD | 7 | 2021 |
FreeBSD | 13 | 2020 |
NetBSD | 9.2 | 2021 |
Windows VistaとWindows 7で動作するCosmopolitanのコミュニティサポートバージョンについては、私たちのvistaブランチをご覧ください。
スペシャルサンクス
このプロジェクトの資金は、GitHub SponsorsとPatreonを利用したクラウドソーシングで調達しています。皆様のご支援がこのプロジェクトを可能にしています。ありがとうございます!また、以下のグループと個人の方々にも特別な感謝の意を表したいと思います。:
私たちの活動を最高レベルで公的に後援してくれたことに対して。