Kilalanin ang bagong bersyon ng Cosmopolitan 2.0, ang cross-platform na karaniwang C library

Ang paglulunsad ng ang bagong bersyon ng proyekto "Cosmopolitan 2.0", na bumubuo ng isang karaniwang C library at isang unibersal na executable na format ng file na maaaring magamit upang ipamahagi ang mga programa para sa iba't ibang mga operating system nang hindi gumagamit ng mga interpreter at virtual machine.

Ang lalagyan para makabuo ng mga unibersal na executable na file umaasa sa pagsasama-sama ng mga partikular na segment at header mula sa iba't ibang system mga operating system sa isang file, na pinagsasama ang ilang iba't ibang mga format na ginagamit sa Unix, Windows, at macOS.

Para masigurado yan isang solong maipapatupad tumakbo sa mga system Windows at Unix, ang isang trick ay ginagamit upang i-encode ang mga file ng Windows PE bilang isang script ng shell, sinasamantala ang katotohanan na ang Thompson Shell ay hindi gumagamit ng "#!" script marker.

Upang lumikha ng mga program na may kasamang maramihang mga file (pinagsasama-sama ang lahat ng mga mapagkukunan sa isang solong file), sinusuportahan ito upang bumuo ng isang maipapatupad na file sa anyo ng isang espesyal na ginawang ZIP archive. Outline ng iminungkahing format (halimbawa ng hello.com application):

Ang qemu-x86_64 na tawag ay ibinigay para sa karagdagang portability at pinapayagan ang code na pinagsama-sama para sa x86_64 na arkitektura na tumakbo sa mga non-x86 na platform, tulad ng mga Raspberry Pi board at mga Apple device na nilagyan ng mga ARM processor. Magagamit din ang proyekto upang lumikha ng mga stand-alone na application na gumagana nang walang operating system (bare metal). Sa ganitong mga application, ang isang bootloader ay naka-attach sa executable file, at ang program ay gumaganap bilang isang bootable operating system.

Pangunahing novelties ng Cosmopolitan 2.0

Sa bagong bersyon na ito ay naka-highlight na ang schema para sa pag-access ng mga panloob na mapagkukunan ay nabago sa loob mula sa isang zip file (kapag binubuksan ang mga file, ang karaniwang /zip/… path ay ginagamit na ngayon sa halip na gamitin ang zip:.. prefix). Katulad nito, upang ma-access ang mga disk sa Windows, posibleng gumamit ng mga landas tulad ng "/c/..." sa halip na "C:/...".

Ang isang bagong APE loader ay iminungkahi (Actually Portable Executable), na tumutukoy sa format ng mga universal executable file. Ang bagong bootloader gumagamit ng mmap upang ilaan ang programa sa memorya at hindi na binabago ang nilalaman sa mabilisang. Kung kinakailangan, ang unibersal na executable ay maaaring i-convert sa mga regular na executable na nakatali sa mga indibidwal na platform.

Sa Linux, posibleng gamitin ang binfmt_misc kernel module upang magpatakbo ng mga programang APE. Nabanggit na ang paggamit ng binfmt_misc ay ang pinakamabilis na paraan ng pagsisimula, bilang karagdagan sa Isang pagpapatupad ng ang functionality ng pledge() at unveil() system calls, na binuo ng OpenBSD project, pati na rin ang pagbibigay ng API para sa paggamit ng data ng tawag sa C, C++, Python, at Redbean programs, pati na rin ang utility mula sa promise.com upang ihiwalay ang mga arbitrary na proseso.

Mahahanap din natin yan para sa Linux, ang pagganap ng clock_gettime at gettimeofday na mga tawag ay nadagdagan hanggang 10 beses dahil sa paggamit ng vDSO (Virtual Dynamic Shared Object) na mekanismo, na nagbibigay-daan sa paglipat ng system call handler sa user space at pag-bypass sa switch context.

Gumagamit ang build ng Landlock Make, isang edisyon ng GNU Make na may mas mahigpit na pagsuri sa dependency at ang paggamit ng Landlock system call upang ihiwalay ang programa mula sa iba pang bahagi ng system at pagbutihin ang kahusayan sa pag-cache. Bilang opsyon, pinapanatili ang kakayahan ng compiler at ang karaniwang GNU Make.

Sa kabilang banda, itinatampok din nito ang ipinatupad na mga function para sa multithreading: _spawn() at _join(), na mga unibersal na binding sa mga partikular na API para sa iba't ibang operating system. Nagsisimula na rin ang trabaho para ipatupad ang suporta para sa mga POSIX thread.

Sa iba pang mga pagbabago na namumukod-tangi:

  • Nagdagdag ng suporta para sa mga opsyong “–ftrace” at “–strace” sa mga executable na file para magpadala ng impormasyon tungkol sa lahat ng function call at system call sa stderr.
  • Nagdagdag ng suporta para sa closefrom() system call na katugma sa Linux 5.9+, FreeBSD 8+ at OpenBSD.
  • Ang mga function ng matematika para sa pagtatrabaho sa mga kumplikadong numero ay inilipat mula sa Musl library.
  • Maraming math function ang napabilis.
  • Ang nointernet() function ay iminungkahi, na hindi pinapagana ang mga kakayahan sa network.
  • Nagdagdag ng mga bagong function upang mahusay na magdagdag ng mga string: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf, at vappendf.
  • Ang isang protektadong bersyon ng kprintf() na pamilya ng mga pag-andar, na idinisenyo upang gumana sa matataas na mga pribilehiyo, ay idinagdag.
  • Malaking pinahusay na pagganap ng SSL, SHA, curve25519, at mga pagpapatupad ng RSA.

Sa wakas, kung interesado kang matuto nang higit pa tungkol dito, dapat mong malaman na ang code ng proyektoo ipinamahagi sa ilalim ng lisensya ng ISC (pinasimpleng bersyon ng MIT/BSD).


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: AB Internet Networks 2008 SL
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.