Cosmopolitan Libc makes C a build-anywhere run-anywhere language, like Java, except it doesn't need an interpreter or virtual machine. Instead, it reconfigures stock GCC and Clang to output a POSIX-approved polyglot format that runs natively on Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS on AMD64 and ARM64 with the best possible performance.
First, download the Cosmopolitan toolchain:
mkdir cosmocc cd cosmocc wget https://cosmo.zip/pub/cosmocc/cosmocc.zip unzip cosmocc.zip
Next, let's make sure you can run APE programs on your system:
bin/make --version
If you get "zsh: exec format error" then you need to upgrade to zsh 5.9+ (we patched it 2 years ago). The same goes for Fish.
Linux users will want to install APE Loader. This will solve issues like WINE trying to run APE, or "run-detectors: unable to find an interpreter".
# for linux users 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"
If you're on Windows, try renaming bin/make
to bin/make.exe
and run that. Then rename it back.
Since cosmocc
is a shell script, you need a UNIX shell. You
can get programs like bash
, less
, etc. by
downloading Cosmos programs
and putting them in C:\bin
. ProTip: dash
makes
a pretty good C:\bin\sh
(which in cosmo speak
is /bin/sh
or /c/bin/sh
). Next, install
Terminal
Preview from the Windows Store and configure it so
that C:\bin\bash -l
is your shell. That way, the lack of
a .exe
extension will no longer be an issue.
WSL users will want to run this command to prevent Windows from running APE as WIN32 programs inside the WSL environment.
sudo sh -c "echo -1 >/proc/sys/fs/binfmt_misc/WSLInterop"
Create a file named hello.c
:
#include <stdio.h> int main(int argc, char *argv[]) { printf("hello world\n"); }
Then compile it as follows:
bin/cosmocc -o hello hello.c ./hello
Congratulations! You just made your first fat actually portable executable. It'll run on Linux/MacOS/Windows/FreeBSD/NetBSD/OpenBSD on the AMD64 and ARM64 architectures.
For high-quality example code on how to develop C programs with Cosmopolitan Libc, see:
For high-quality example code on how to build open source projects with Cosmopolitan Libc, see:
For prebuilt fat binaries of popular open source software, please visit our online service: