Git 2.55, kas iznāca 29. jūnijā, pirmo reizi ieslēdz Rust kompilatoru pēc noklusējuma. Kurš būvē Git no pirmkoda un mašīnā Rust rīkkopas nav, tā būvējums no šī brīža izgāzīsies — ja vien būvēšanas sistēmā to skaidri neizslēdz.
Līdz šim Rust kods Git projektā bija izvēles opcija, ko ieslēdza pats būvētājs. Tagad noklusējums ir apgriezts otrādi. Rust joprojām var izslēgt ar karogu meson configure -Drust=disabled vai make NO_RUST=YesPlease, taču neviens vairs par to neatgādinās — Meson to sagaida automātiski. GitLab izlaiduma piezīmēs tas formulēts tieši: šajā versijā Rust kompilators ir nepieciešams, ja vien to skaidri neizslēdz.
Rust kods 2.55 vēl arvien ir izslēdzams. Git 3.0, kas gaidāms 2026. gada nogalē, šo iespēju atņems pavisam.
Ko tieši maina 2.55
Galvenā izmaiņa ir būvēšanas prasība, nevis kāda jauna komanda ikdienas lietotājam. Kurš instalē Git no distribūcijas pakotnes vai lejupielādē gatavu būvējumu, izmaiņu nemanīs — Rust jau būs iekompilēts. Sāpe skar tos, kuri Git kompilē paši: konteineru attēlus, CI konveijerus, iegultās sistēmas un vecākas serveru vides bez Rust kompilatora.
Pirmais Rust produkcijas kods Git projektā parādījās 2.52 versijā pagājušā gada novembrī — sākumā tikai dažas palīgfunkcijas. Git 2.54 pievienoja ObjectID tipu, kas ir daļa no darba pie SHA-1 un SHA-256 sadarbspējas. 2.55 ir nākamais solis tajā pašā virzienā: infrastruktūra ir gatava, tāpēc Rust ieslēdz pēc noklusējuma, lai atklātu būvēšanas problēmas, pirms tās kļūst neizbēgamas.
Kāpēc Git pāriet uz Rust
Iemesls ir atmiņas drošība. Git kopš 2005. gada ir rakstīts galvenokārt C valodā, un C atmiņas kļūdas ir klasisks ievainojamību avots. 2023. gadā drošības firmas X41 D-SEC un GitLab veiktais audits Git C kodā atrada divas kritiskas attālinātas koda izpildes ievainojamības, kuru pamatā bija heap atmiņas bojājums. ASV aģentūras NSA un CISA savos ieteikumos min, ka aptuveni 70 % izmantojamo ievainojamību C kodā ir atmiņas drošības problēmas.
Rust šo klasi kļūdu novērš kompilēšanas laikā. Pārrakstīt visu Git uzreiz neviens negrasās — pāreja notiek pakāpeniski, funkciju pa funkcijai. Rust integrāciju vada Patriks Šteinhards (Patrick Steinhardt), un pirmās pārrakstītās daļas apzināti ir mazas un labi pārbaudāmas.
Ceļš uz Git 3.0
Git 3.0 mērķa datums ir 2026. gada beigas, un tas nesīs trīs lielas izmaiņas. Pirmā — Rust kļūs par obligātu būvēšanas atkarību bez iespējas izslēgt. Otrā — noklusējuma jaucējalgoritms mainīsies no SHA-1 uz drošāko SHA-256. Trešā — jaunu repozitoriju noklusējuma zara nosaukums mainīsies no master uz main, saglabājot norādi tiem, kuri grib veco nosaukumu.
Vislēnāk virzās tieši SHA-256 daļa. LWN atspoguļotajā izstrādātāju sarakstē Braiens M. Kārlsons (Brian M. Carlson) lēsa, ka pilnai SHA-1 un SHA-256 sadarbspējai vajadzīgi 200–400 ielāpu, no kuriem gatavi ir aptuveni 100, un pašreizējais temps bez papildu izstrādātājiem 3.0 datumam ir par lēnu. Tāpēc arī 3.0 nav fiksēta datuma — tas atkarīgs no tā, cik ātri Git forge platformas un citi ap Git būvētie projekti sagatavos savu SHA-256 atbalstu. GitHub, piemēram, SHA-256 repozitorijus vēl neatbalsta.
Git uzturētājs Junio Hamano (Junio Hamano) paralēli gatavo stingrākus noteikumus par pašu kodu: projekts grasās noraidīt ieguldījumus, kas izskatās pēc AI ģenerēta teksta — pārāk formāli, uzpūsti vai virspusēji pareizi, bet pēc būtības tukši.
Ko darīt CI komandām jau tagad
Ja jūsu būvēšanas process kompilē Git no pirmkoda, pārbaudiet to pirms atjaunināšanas uz 2.55. Ir divi ceļi. Var pievienot Rust kompilatoru būvēšanas videi — tas ir arī ceļš, pa kuru jebkurā gadījumā nāksies iet līdz 3.0. Vai arī uz laiku pievienot NO_RUST=YesPlease, kas dod atelpu, bet tikai līdz 3.0, kur šī opcija pazudīs. Open Source For You norāda, ka tieši nesagatavotās CI vides ir tās, kur šī izmaiņa pārsteigs visnegaidītāk.
Citas 2.55 izmaiņas
Papildus Rust versijā ir dažas praktiskas lietas. Jaunā komanda git history fixup ļauj iepludināt sagatavotās izmaiņas tieši kādā vecākā komitā bez interaktīvās rebase procedūras; plašāka git history apakškomanda vēl ir eksperimentāla. Repakošana uzlabota ar inkrementāliem daudzpaku indeksiem. GitLab piezīmes min arī fsmonitor dēmonu Linux videi, kas balstās uz inotify, komandu git push uz attālinātu grupu un --graph-lane-limit opciju komandai git log.
Git 2.55 pirmkodu var lejupielādēt no oficiālā izlaiduma; distribūciju pakotnes pienāks nedēļu vai divu laikā.
Avoti
- GitLab — What’s new in Git 2.55.0
- Phoronix — Git 2.55 Released With Rust Support Enabled By Default
- Open Source For You — Git 2.55 Forces CI Teams To Prepare For Rust
- LWN.net — Git considers SHA-256, Rust, LLMs, and more
- The GitHub Blog — Highlights from Git 2.52
Titulbilde: Blow-up Ferris at the Rust Programming Language assembly at 38c3, autors Igloo22225, licence CC BY 4.0, caur Wikimedia Commons; apgriezta un apstrādāta ITN.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.