Temui versi baru Cosmopolitan 2.0, pustaka C standar lintas platform

Peluncuran versi baru proyek "Kosmopolitan 2.0", yang mengembangkan pustaka C standar dan format file universal yang dapat dieksekusi yang dapat digunakan untuk mendistribusikan program untuk sistem operasi yang berbeda tanpa menggunakan penerjemah dan mesin virtual.

Wadah untuk menghasilkan file yang dapat dieksekusi universal bergantung pada penggabungan segmen dan header tertentu dari sistem yang berbeda sistem operasi menjadi satu file, menggabungkan beberapa format berbeda yang digunakan di Unix, Windows, dan macOS.

Untuk memastikan bahwa satu executable berjalan di sistem Windows dan Unix, trik digunakan untuk mengkodekan file Windows PE sebagai skrip shell, mengambil keuntungan dari fakta bahwa Thompson Shell tidak menggunakan penanda skrip "#!".

Untuk membuat program yang menyertakan banyak file (menggabungkan semua sumber daya menjadi satu file), ini didukung untuk menghasilkan file yang dapat dieksekusi dalam bentuk arsip ZIP yang dibuat khusus. Garis besar format yang diusulkan (contoh aplikasi hello.com):

Panggilan qemu-x86_64 disediakan untuk portabilitas tambahan dan memungkinkan kode yang dikompilasi untuk arsitektur x86_64 berjalan pada platform non-x86, seperti papan Raspberry Pi dan perangkat Apple yang dilengkapi dengan prosesor ARM. Proyek ini juga dapat digunakan untuk membuat aplikasi yang berdiri sendiri yang bekerja tanpa sistem operasi (bare metal). Dalam aplikasi seperti itu, bootloader dilampirkan ke file yang dapat dieksekusi, dan program bertindak sebagai sistem operasi yang dapat di-boot.

Kebaruan utama Cosmopolitan 2.0

Dalam versi baru ini disorot itu skema untuk mengakses sumber daya internal telah diubah dentro dari file zip (saat membuka file, jalur /zip/… yang biasa sekarang digunakan alih-alih menggunakan awalan zip:..). Demikian pula, untuk mengakses disk di Windows, dimungkinkan untuk menggunakan jalur seperti "/c/..." alih-alih "C:/...".

Pemuat APE baru diusulkan (Actually Portable Executable), yang menentukan format file universal yang dapat dieksekusi. bootloader baru menggunakan mmap untuk mengalokasikan program ke memori dan tidak lagi mengubah konten dengan cepat. Jika perlu, executable universal dapat diubah menjadi executable reguler yang terikat pada platform individual.

Di Linux, dimungkinkan untuk menggunakan modul kernel binfmt_misc untuk menjalankan program APE. Perlu dicatat bahwa penggunaan binfmt_misc adalah metode startup tercepat, selain Sebuah implementasi dari fungsionalitas panggilan sistem janji() dan unveil(), yang dikembangkan oleh proyek OpenBSD, serta menyediakan API untuk menggunakan data panggilan dalam program C, C++, Python, dan Redbean, serta utilitas dari janji.com untuk mengisolasi proses sewenang-wenang.

Kami juga dapat menemukannya untuk Linux, kinerja panggilan clock_gettime dan gettimeofday telah ditingkatkan hingga 10 kali karena penggunaan mekanisme vDSO (Virtual Dynamic Shared Object), yang memungkinkan pemindahan pengendali panggilan sistem ke ruang pengguna dan melewati konteks sakelar.

Membangun menggunakan Landlock Make, edisi GNU Make dengan pemeriksaan ketergantungan yang lebih ketat dan penggunaan panggilan sistem Landlock untuk mengisolasi program dari sistem lainnya dan meningkatkan efisiensi caching. Sebagai opsi, kemampuan kompiler dan GNU Make biasa dipertahankan.

Di sisi lain, itu juga menyoroti mengimplementasikan fungsi untuk multithreading: _spawn() dan _join(), yang merupakan ikatan universal atas API tertentu untuk sistem operasi yang berbeda. Pekerjaan juga sedang dilakukan untuk mengimplementasikan dukungan untuk utas POSIX.

Dari perubahan lain yang menonjol:

  • Menambahkan dukungan untuk opsi “–ftrace” dan “–strace” ke file yang dapat dieksekusi untuk mengirim informasi tentang semua panggilan fungsi dan panggilan sistem ke stderr.
  • Menambahkan dukungan untuk panggilan sistem closefrom() yang kompatibel dengan Linux 5.9+, FreeBSD 8+ dan OpenBSD.
  • Fungsi matematika untuk bekerja dengan bilangan kompleks telah dipindahkan dari perpustakaan Musl.
  • Banyak fungsi matematika telah dipercepat.
  • Fungsi nointernet() diusulkan, yang menonaktifkan kemampuan jaringan.
  • Menambahkan fungsi baru untuk menambahkan string secara efisien: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf, dan vappendf.
  • Versi terlindungi dari keluarga fungsi kprintf(), yang dirancang untuk bekerja dengan hak istimewa yang lebih tinggi, telah ditambahkan.
  • Peningkatan kinerja implementasi SSL, SHA, curve25519, dan RSA secara signifikan.

Akhirnya, jika Anda tertarik untuk mempelajarinya lebih lanjut, Anda harus tahu bahwa kode proyekatau didistribusikan di bawah lisensi ISC (versi sederhana dari MIT/BSD).


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Bertanggung jawab atas data: AB Internet Networks 2008 SL
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.