การเปิดตัว เวอร์ชันใหม่ของโครงการ "คอสโมโพลิแทน 2.0"ซึ่งพัฒนาไลบรารี C มาตรฐานและรูปแบบไฟล์ปฏิบัติการสากลที่สามารถใช้แจกจ่ายโปรแกรมสำหรับระบบปฏิบัติการต่างๆ ได้โดยไม่ต้องใช้ล่ามและเครื่องเสมือน
ภาชนะ เพื่อสร้างไฟล์ปฏิบัติการสากล อาศัยการรวมกลุ่มและส่วนหัวเฉพาะจากระบบต่างๆ เข้าด้วยกัน ระบบปฏิบัติการเป็นไฟล์เดียว โดยรวมรูปแบบต่างๆ ที่หลากหลายที่ใช้ใน Unix, Windows และ macOS
เพื่อให้แน่ใจว่า ปฏิบัติการเดียว ทำงานบนระบบ วินโดว์และยูนิกซ์ เคล็ดลับใช้เพื่อเข้ารหัสไฟล์ Windows PE เป็นเชลล์สคริปต์ ใช้ประโยชน์จากข้อเท็จจริงที่ว่า Thompson Shell ไม่ได้ใช้เครื่องหมายสคริปต์ "#!"
ในการสร้างโปรแกรมที่มีไฟล์หลายไฟล์ (รวมทรัพยากรทั้งหมดเป็นไฟล์เดียว) รองรับการสร้างไฟล์ปฏิบัติการในรูปแบบของไฟล์ ZIP ที่สร้างขึ้นเป็นพิเศษ โครงร่างของรูปแบบที่เสนอ (ตัวอย่างแอปพลิเคชัน hello.com):
มีการเรียก qemu-x86_64 เพื่อการพกพาเพิ่มเติม และอนุญาตให้คอมไพล์โค้ดสำหรับสถาปัตยกรรม x86_64 เพื่อทำงานบนแพลตฟอร์มที่ไม่ใช่ x86 เช่น บอร์ด Raspberry Pi และอุปกรณ์ Apple ที่ติดตั้งโปรเซสเซอร์ ARM โปรเจ็กต์นี้ยังสามารถใช้เพื่อสร้างแอปพลิเคชันแบบสแตนด์อโลนที่ทำงานโดยไม่มีระบบปฏิบัติการ (โลหะเปลือย) ในแอปพลิเคชันดังกล่าว bootloader จะแนบมากับไฟล์เรียกทำงาน และโปรแกรมทำหน้าที่เป็นระบบปฏิบัติการที่สามารถบู๊ตได้
ความแปลกใหม่ที่สำคัญของ Cosmopolitan 2.0
ในเวอร์ชั่นใหม่นี้จะเน้นว่า สคีมาสำหรับการเข้าถึงทรัพยากรภายในมีการเปลี่ยนแปลง Dentro จากไฟล์ zip (เมื่อเปิดไฟล์ เส้นทางปกติ /zip/… จะถูกใช้แทนการใช้คำนำหน้า zip:..) ในทำนองเดียวกัน ในการเข้าถึงดิสก์ใน Windows คุณสามารถใช้พาธเช่น "/c/…" แทน "C:/…"
มีการเสนอตัวโหลด APE ใหม่ (Actually Portable Executable) ซึ่งกำหนดรูปแบบของไฟล์ปฏิบัติการสากล ตัวโหลดบูตใหม่ ใช้ mmap เพื่อจัดสรรโปรแกรมไปยังหน่วยความจำ และไม่เปลี่ยนแปลงเนื้อหาทันทีอีกต่อไป หากจำเป็น Universal executable สามารถแปลงเป็น executables ปกติที่เชื่อมโยงกับแต่ละแพลตฟอร์ม
บน Linux คุณสามารถใช้ binfmt_misc kernel module เพื่อเรียกใช้โปรแกรม APE สังเกตว่าการใช้ binfmt_misc เป็นวิธีการเริ่มต้นที่เร็วที่สุด นอกเหนือจาก การดำเนินการของ ฟังก์ชันการทำงานของการเรียกระบบ pledge() และเปิดเผย () ที่พัฒนาโดยโปรเจ็กต์ OpenBSD รวมถึงการจัดเตรียม API สำหรับการใช้ข้อมูลการโทรในโปรแกรม C, C++, Python และ Redbean รวมถึงยูทิลิตี้จาก promise.com เพื่อแยกกระบวนการโดยพลการ
เรายังสามารถค้นหาได้ สำหรับ Linux ประสิทธิภาพของการโทร clock_gettime และ gettimeofday เพิ่มขึ้น มากถึง 10 ครั้งเนื่องจากการใช้กลไก vDSO (Virtual Dynamic Shared Object) ซึ่งอนุญาตให้ถ่ายโอนตัวจัดการการเรียกของระบบไปยังพื้นที่ผู้ใช้และข้ามบริบทของสวิตช์
บิลด์ใช้ Landlock Makeซึ่งเป็นรุ่นของ GNU Make ที่มีการตรวจสอบการพึ่งพาที่เข้มงวดยิ่งขึ้นและการใช้การเรียกระบบ Landlock เพื่อแยกโปรแกรมออกจากส่วนที่เหลือของระบบและปรับปรุงประสิทธิภาพการแคช ความสามารถในการคอมไพเลอร์และ GNU Make ตามปกติจะถูกรักษาไว้เป็นตัวเลือก
ในทางกลับกัน มันยังเน้นที่ ฟังก์ชั่นการใช้งานสำหรับมัลติเธรด: _spawn() และ _join(), ซึ่งเป็นการเชื่อมโยงสากลกับ API เฉพาะสำหรับระบบปฏิบัติการที่แตกต่างกัน งานกำลังดำเนินการสนับสนุนเธรด POSIX
การเปลี่ยนแปลงอื่น ๆ ที่โดดเด่น:
- เพิ่มการรองรับตัวเลือก “–ftrace” และ “–strace” ให้กับไฟล์สั่งการเพื่อส่งข้อมูลเกี่ยวกับการเรียกฟังก์ชันทั้งหมดและการเรียกระบบไปยัง stderr
- เพิ่มการรองรับการเรียกระบบ closefrom() ที่เข้ากันได้กับ Linux 5.9+, FreeBSD 8+ และ OpenBSD
- ฟังก์ชันทางคณิตศาสตร์สำหรับการทำงานกับจำนวนเชิงซ้อนได้ถูกย้ายจากไลบรารี Musl
- ฟังก์ชันทางคณิตศาสตร์จำนวนมากได้รับการเร่งความเร็วขึ้น
- มีการเสนอฟังก์ชัน nointernet() ซึ่งปิดใช้งานความสามารถของเครือข่าย
- เพิ่มฟังก์ชันใหม่เพื่อต่อท้ายสตริงอย่างมีประสิทธิภาพ: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf และ vappendf
- เพิ่มเวอร์ชันที่ได้รับการป้องกันของตระกูลฟังก์ชัน kprintf() ที่ได้รับการออกแบบมาเพื่อทำงานกับสิทธิ์ระดับสูง
- ปรับปรุงประสิทธิภาพการใช้งาน SSL, SHA, curve25519 และ RSA อย่างมีนัยสำคัญ
สุดท้ายนี้ หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับมัน คุณควรรู้ว่ารหัสโครงการหรือจำหน่ายภายใต้ใบอนุญาต ISC (เวอร์ชันย่อของ MIT/BSD)