Skip to content

Releases: jart/cosmopolitan

Cosmopolitan v0.1

29 Jan 00:54
Compare
Choose a tag to compare

Cosmopolitan Libc makes C a build-once run-anywhere language, like Java, except it doesn't need an interpreter or virtual machine. Instead, it reconfigures stock GCC to output a POSIX-approved polyglot format that runs natively on Linux + Mac + Windows + FreeBSD + OpenBSD + BIOS with the best possible performance and the tiniest footprint imaginable.

Changes

This is our first official release. You may remember the pre-alpha demo that went viral on Hacker News last month. There's been a considerable number of bug fixes since then. Here's a curated list of what happened:

  • Fix Z-shell (pending upstream) jart/zsh@94a4bc1
  • Fix FreeBSD Almquist Shell #23 in freebsd/freebsd-src@e0f5c13 thanks @jillest and Austin Group!
  • Fix metal bugs so executables boot in qemu-system-x86_64 #20
  • Fix Windows 7 compatibility #19
  • Fix memcpy on sandybridge and ivybridge 8fa47ac
  • Fix RHEL5 and RHEL7 compatibility 45b7248 565edd0 #24
  • Fix link order in cosmopolitan.a 9f68d6e
  • Fix opendir() on XNU and OpenBSD 45b7248
  • Fix system() on NT and improve vfork() / execve() implementation 45b7248
  • Fix system calls with 7+ arguments 45b7248
  • Fix OpenBSD truncate() and ftruncate() thunk typo 45b7248
  • Fix Windows when FDs exceeds OPEN_MAX 45b7248
  • Make long double long again on Windows 45b7248
  • Use copy_file_range on FreeBSD 13+ 45b7248
  • Create integrated assembler for chibicc 81ef162
  • Add popen(), pclose(), brk(), sbrk() d7ac16a
  • Add timingsafe_memcmp #13

Getting Started

Here's how to get started with the freestanding hermetically-sealed monolithic source repository:

tar xf cosmopolitan-0.1.tar.gz
cd cosmo
make -j12
o//examples/hello.com

Here's how to get started with the amalgamated binaries, which let you bring your own build system:

unzip cosmopolitan-amalgamated-0.1.zip
echo 'main() { printf("hello world\n"); }' >hello.c
gcc -g -O -static -fno-pie -no-pie -mno-red-zone -nostdlib -nostdinc \
  -o hello.com.dbg hello.c -Wl,--gc-sections -Wl,-z,max-page-size=0x1000 -fuse-ld=bfd \
  -Wl,-T,ape.lds -include cosmopolitan.h crt.o ape.o cosmopolitan.a
objcopy -SO binary hello.com.dbg hello.com
./hello.com

Please note we assume that you compile your programs on Linux. If you want to compile your binaries on Windows, then please read our new tutorial on how you can use the x86_64-linux-gnu static exes we created. See https://justine.lol/cosmopolitan/windows-compiling.html and https://justine.lol/cosmopolitan/windows-debugging.html If you use XNU then we'll be sharing a prebuilt Linux toolchain for you too soon.

Quality Assurance

All 196 tests passing on the following systems is confirmed:

  • Alpine Linux 5.4.43
  • Debian Linux 10 Buster 4.19.0
  • Red Hat Enterprise Linux 7 3.10.0
  • Red Hat Enterprise Linux 5 2.6.18
  • XNU 19.6.0
  • Windows 7
  • Windows 10
  • FreeBSD 12.1
  • OpenBSD 6.8

cosmopolitan-0 1

Thanks

Thanks go out to @jillest, @probonopd, @nicholatian, @vshymanskyy, @PerfectProductions, @JesseRMeyer, @nikhedonia, @tpoindex, @maroneze, @zhengshuxin, @Phate6660, @Theldus, @severak, @paususe, @rhdxmr, @tankf33der, @nuclight, @nsauzede, @gavinhoward, and many others who've helped make this release possible.