இன்டர்பிரெட்டர்கள் அல்லது விர்ச்சுவல் மெஷின்களின் தேவையின்றி, வெவ்வேறு இயக்க முறைமைகளில் நிரல்களை விநியோகிக்கப் பயன்படும் ஒரு தரநிலை C லைப்ரரி மற்றும் ஒரு யுனிவர்சல் எக்ஸிக்யூட்டபிள் ஃபார்மேட்டை உருவாக்கும் காஸ்மோபாலிட்டன் 2.0 திட்டம் வெளியிடப்பட்டுள்ளது. GCC மற்றும் Clang-ஐப் பயன்படுத்தித் தொகுப்பதன் விளைவாக, எந்தவொரு டிஸ்ட்ரிபியூஷனிலும் இயங்கக்கூடிய, ஸ்டாட்டிக்காக இணைக்கப்பட்ட ஒரு யுனிவர்சல் எக்ஸிக்யூட்டபிள் கோப்பு உருவாகிறது. Linux, macOS, WindowsFreeBSD, OpenBSD, NetBSD மற்றும் BIOS அணுகல் கூட இதில் அடங்கும். இந்தத் திட்டத்தின் குறியீடு, ISC உரிமத்தின் கீழ் விநியோகிக்கப்படுகிறது (இது MIT/BSD உரிமத்தின் எளிமைப்படுத்தப்பட்ட பதிப்பாகும்).
உலகளாவிய இயக்கக்கூடிய கோப்புகளை உருவாக்குவதற்கான கொள்கலனானது, வெவ்வேறு இயக்க முறைமைகளுக்குரிய பிரிவுகள் மற்றும் தலைப்புகளை (PE, ELF, MACHO, OPENBSD) ஒரே கோப்பில் இணைப்பதையும், யூனிக்ஸில் பயன்படுத்தப்படும் பல்வேறு வடிவங்களை ஒன்றிணைப்பதையும் அடிப்படையாகக் கொண்டது. Windows и macOSஒரு இயங்கக்கூடிய கோப்பை இயக்க முடியும் என்பதை உறுதிப்படுத்த Windows மேலும் யூனிக்ஸ் அமைப்புகள் கோப்பு குறியாக்கம் தொடர்பான ஒரு தந்திரத்தைப் பயன்படுத்துகின்றன. Windows தாம்சன் ஷெல்லில் "#!" ஸ்கிரிப்ட் மார்க்கர் இல்லாததை சாதகமாகப் பயன்படுத்தி, PE-ஐ ஒரு ஷெல் ஸ்கிரிப்ட்டாக உருவாக்கலாம். பல கோப்புகளை உள்ளடக்கிய நிரல்களை உருவாக்க (அனைத்து வளங்களையும் ஒரே கோப்பில் இணைத்து), இயங்கு கோப்பை ஒரு பிரத்யேக வடிவமைப்பு கொண்ட ZIP காப்பகமாக உருவாக்கலாம். முன்மொழியப்பட்ட வடிவம் (எடுத்துக்காட்டு: hello.com செயலி):
MZqFpD='BIOS BOOT SECTOR' exec 7 $(command -v $0) printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$ @" 1 உண்மையான பயன்முறையிலிருந்து வெளியேறு... ELF பிரிவுகள்... OPENBSD குறிப்பு... மச்சோ ஹெடர்கள்... குறியீடு மற்றும் தரவு... ZIP அடைவு...
கோப்பின் தொடக்கத்தில் “MZqFpD” என்ற லேபிள் குறிப்பிடப்பட்டுள்ளது, இது வடிவமைப்புத் தலைப்பாகக் கருதப்படுகிறது. Windows PE. இந்தத் தொடரானது "pop %r10 ; jno 0x4a ; jo 0x4a" என்ற கட்டளையாகவும், "\177ELF" என்ற சரமானது "jg 0x47" என்ற கட்டளையாகவும் குறியீட்டு நீக்கம் செய்யப்படுகிறது, இவை நுழைவுப் புள்ளிக்குத் திசைதிருப்பப் பயன்படுகின்றன. யூனிக்ஸ் அமைப்புகளில், ஷெல் குறியீடானது exec கட்டளையைப் பயன்படுத்தி இயக்கப்படுகிறது, இது இயக்கக்கூடிய குறியீட்டைப் பெயரிடப்படாத ஒரு குழாய் வழியாக அனுப்புகிறது. முன்மொழியப்பட்ட முறையின் ஒரு வரம்பு என்னவென்றால், தாம்சன் ஷெல் இணக்கப் பயன்முறையை ஆதரிக்கும் ஷெல்களைப் பயன்படுத்தும் யூனிக்ஸ் போன்ற இயக்க முறைமைகளில் மட்டுமே இதை இயக்க முடியும்.
qemu-x86_64 அழைப்பு கூடுதல் பெயர்வுத்திறனை வழங்குகிறது மற்றும் x86_64 கட்டமைப்பிற்காக தொகுக்கப்பட்ட குறியீட்டை x86 அல்லாத இயங்குதளங்களில் இயக்க அனுமதிக்கிறது. இயக்க முறைமை (வெற்று உலோகம்) இல்லாமல் இயங்கும் தன்னிறைவான பயன்பாடுகளை உருவாக்கவும் இந்த திட்டம் பயன்படுத்தப்படலாம். அத்தகைய பயன்பாடுகளில், ஒரு துவக்க ஏற்றி இயங்கக்கூடிய கோப்பில் இணைக்கப்பட்டுள்ளது, மேலும் நிரல் துவக்கக்கூடிய இயக்க முறைமையாக செயல்படுகிறது.
திட்டத்தால் உருவாக்கப்பட்ட நிலையான C லைப்ரரி libc 2024 செயல்பாடுகளை வழங்குகிறது (முதல் வெளியீட்டில் சுமார் 1400 செயல்பாடுகள் இருந்தன). செயல்திறனைப் பொறுத்தவரை, காஸ்மோபாலிட்டன் glibc போல வேகமாகச் செயல்படுகிறது மற்றும் Musl மற்றும் Newlib ஐ விட குறிப்பிடத்தக்க வகையில் முன்னணியில் உள்ளது, காஸ்மோபாலிட்டன் என்பது glibc ஐ விட குறியீடு அளவில் சிறிய அளவிலும் Musl மற்றும் Newlib உடன் ஒத்ததாக இருந்தாலும். memcpy மற்றும் strlen போன்ற அடிக்கடி அழைக்கப்படும் செயல்பாடுகளை மேம்படுத்த, "ட்ரிக்கிள்-டவுன் பெர்ஃபார்மென்ஸ்" நுட்பம் கூடுதலாகப் பயன்படுத்தப்படுகிறது, இதில் ஒரு மேக்ரோ பைண்டிங் செயல்பாட்டை அழைக்க பயன்படுத்தப்படுகிறது, இதில் குறியீடு செயல்படுத்தலில் ஈடுபட்டுள்ள CPU பதிவேடுகள் பற்றி கம்பைலருக்கு தெரிவிக்கப்படுகிறது. செயல்முறை, மாற்றக்கூடிய பதிவேடுகளை மட்டுமே சேமிப்பதன் மூலம் CPU நிலையை சேமிக்கும் போது வளங்களை சேமிக்க அனுமதிக்கிறது.
புதிய வெளியீட்டில் உள்ள மாற்றங்களில்:
- ஒரு ஜிப் கோப்பிற்குள் இருக்கும் உள்ளக வளங்களை அணுகுவதற்கான வழிமுறை மாற்றப்பட்டுள்ளது (கோப்புகளைத் திறக்கும்போது, zip:.. என்ற முன்னொட்டைப் பயன்படுத்தி அணுகுவதற்குப் பதிலாக, இப்போது வழக்கமான /zip/… பாதைகள் பயன்படுத்தப்படுகின்றன). இதேபோல், வட்டுகளை அணுகுவதற்கும்... Windows "C:/..." என்பதற்குப் பதிலாக "/c/..." போன்ற பாதைகளைப் பயன்படுத்தும் வசதி அறிமுகப்படுத்தப்பட்டுள்ளது.
- ஒரு புதிய APE (உண்மையில் போர்ட்டபிள் இயங்கக்கூடிய) ஏற்றி முன்மொழியப்பட்டது, இது உலகளாவிய இயங்கக்கூடிய கோப்புகளின் வடிவமைப்பை வரையறுக்கிறது. புதிய ஏற்றி நிரலை நினைவகத்தில் வைக்க mmap ஐப் பயன்படுத்துகிறது மேலும் பறக்கும்போது உள்ளடக்கங்களை மாற்றாது. தேவைப்பட்டால், உலகளாவிய இயங்கக்கூடிய கோப்பை தனிப்பட்ட இயங்குதளங்களுடன் இணைக்கப்பட்ட வழக்கமான இயங்கக்கூடிய கோப்புகளாக மாற்றலாம்.
- மேடையில் Linux binfmt_misc கர்னல் தொகுதியைப் பயன்படுத்தி APE நிரல்களைத் தொடங்கும் திறன் செயல்படுத்தப்பட்டுள்ளது. binfmt_misc-ஐப் பயன்படுத்துவதே மிக வேகமான தொடக்க முறை என்பது குறிப்பிடத்தக்கது.
- செய்ய Linux OpenBSD திட்டத்தால் உருவாக்கப்பட்ட pledge() மற்றும் unveil() அமைப்பு அழைப்புகளின் ஒரு செயலாக்கம் முன்மொழியப்பட்டுள்ளது. இந்த அழைப்புகளை C, C++, Python மற்றும் Redbean நிரல்களில் பயன்படுத்துவதற்கான ஒரு API-யும், அத்துடன் தன்னிச்சையான செயல்முறைகளைத் தனிமைப்படுத்துவதற்கான pledge.com பயன்பாடும் வழங்கப்பட்டுள்ளன.
- கட்டமைப்பானது லேண்ட்லாக் மேக் பயன்பாட்டைப் பயன்படுத்துகிறது - குனு மேக்கின் பதிப்பு மிகவும் கடுமையான சார்பு சரிபார்ப்பு மற்றும் லேண்ட்லாக் சிஸ்டம் அழைப்பைப் பயன்படுத்தி நிரலை மற்ற கணினியிலிருந்து தனிமைப்படுத்தவும், கேச்சிங் செயல்திறனை மேம்படுத்தவும் பயன்படுத்துகிறது. ஒரு விருப்பமாக, வழக்கமான குனு மேக்குடன் உருவாக்கும் திறன் தக்கவைக்கப்படுகிறது.
- மல்டித்ரெடிங்கிற்கான செயல்பாடுகள் செயல்படுத்தப்பட்டுள்ளன - _spawn() மற்றும் _join(), இவை வெவ்வேறு இயக்க முறைமைகளுக்கு குறிப்பிட்ட APIகள் மீது உலகளாவிய பிணைப்புகளாகும். POSIX Threads ஆதரவை செயல்படுத்துவதற்கான பணியும் நடந்து வருகிறது.
- ஒவ்வொரு தொடருக்கும் தனித்தனி சேமிப்பகத்தைப் பயன்படுத்த _Thread_local முக்கிய சொல்லைப் பயன்படுத்த முடியும் (TLS, Thread-Local Storage). இயல்பாக, C ரன்டைம் முக்கிய தொடருக்கான TLS ஐ துவக்குகிறது, இது குறைந்தபட்ச இயங்கக்கூடிய அளவு 12 KB இலிருந்து 16 KB ஆக அதிகரிக்க காரணமாகிறது.
- அனைத்து செயல்பாட்டு அழைப்புகள் மற்றும் கணினி அழைப்புகள் பற்றிய தகவல்களை stderr க்கு வெளியிட, "--ftrace" மற்றும் "--strace" அளவுருக்களுக்கான ஆதரவு இயங்கக்கூடிய கோப்புகளில் சேர்க்கப்பட்டுள்ளது.
- closefrom() சிஸ்டம் அழைப்பிற்கான ஆதரவு சேர்க்கப்பட்டது, இது ஆதரிக்கப்படுகிறது Linux 5.9+, FreeBSD 8+ மற்றும் OpenBSD.
- மேடையில் Linux vDSO (மெய்நிகர் மாறும் பகிரப்பட்ட பொருள்) பொறிமுறையைப் பயன்படுத்துவதன் மூலம் clock_gettime மற்றும் gettimeofday அழைப்புகளின் செயல்திறன் 10 மடங்கு வரை அதிகரிக்கப்பட்டுள்ளது. இது, சிஸ்டம் கால் ஹேண்ட்லரை பயனர் வெளிக்கு நகர்த்தவும், சூழல் மாற்றங்களைத் தவிர்க்கவும் உதவுகிறது.
- சிக்கலான எண்களுடன் வேலை செய்வதற்கான கணித செயல்பாடுகள் Musl நூலகத்திலிருந்து நகர்த்தப்பட்டுள்ளன. பல கணித செயல்பாடுகளின் வேலை துரிதப்படுத்தப்பட்டுள்ளது.
- பிணைய திறன்களை முடக்குவதற்கு noninternet() செயல்பாடு முன்மொழியப்பட்டது.
- சரங்களை திறம்படச் சேர்ப்பதற்கான புதிய செயல்பாடுகளைச் சேர்த்தது: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf மற்றும் vappendf.
- kprintf() குடும்பச் செயல்பாடுகளின் பாதுகாக்கப்பட்ட பதிப்பு சேர்க்கப்பட்டது, உயர்ந்த சலுகைகளுடன் வேலை செய்ய வடிவமைக்கப்பட்டுள்ளது.
- செயல்படுத்தல்களின் செயல்திறன் கணிசமாக மேம்படுத்தப்பட்டுள்ளது SSL ஐ, SHA, curve25519 மற்றும் RSA.
ஆதாரம்: opennet.ru
