Op de mailinglijst van Git is een patchreeks gepubliceerd waarin de eerste stap wordt gezet richting de integratie van Rust in de kern van het project.
Patrick Steinhardt stelt in zijn voorstel dat Rust vanaf Git 3.0 een verplicht onderdeel zal worden van de build-infrastructuur. De reeks wordt gepresenteerd als een testballon, vergelijkbaar met eerdere experimenten rondom de invoering van C99-functionaliteit. Het doel is om tijd te creëren voor experimenten met de nieuwe taal, om de bouwinfrastructuur aan te passen en om distributies de kans te geven de nieuwe afhankelijkheid op te nemen.
Als eerste proef is het subsystem varint.c omgezet naar Rust. Dit onderdeel is bewust gekozen omdat het klein en zelfstandig is en geen afhankelijkheden kent. Het laat ontwikkelaars de interoperabiliteit tussen C en Rust testen en geeft ruimte om tooling en infrastructuur in te richten. Alle bestaande tests slagen met de nieuwe implementatie, wat bevestigt dat de basis werkt. Voorlopig wordt alleen ondersteuning via Meson aangeboden. Als het project instemt met de voorgestelde richting, volgt later ook ondersteuning in de traditionele Makefiles.
Volgens Steinhardt ontbreken er nog meerdere onderdelen in deze fase. Zo is er nog geen CI-taak ingericht die specifiek controleert of Rust correct bouwt en werkt, en is er nog geen tooling aanwezig om consistente formatting via cargo format af te dwingen. De bedoeling is om deze elementen later toe te voegen, zodat het project een speelveld krijgt waarbinnen verder geëxperimenteerd kan worden.
Ondersteuning Rust nu nog optioneel
De aankondiging komt op een moment dat Git zich in versie 2.51 bevindt. Daarmee is duidelijk dat de overstap naar Rust nog enkele releases op zich zal laten wachten. Wel is in de patchreeks al een toevoeging opgenomen aan de documentatie waarin wordt vastgelegd dat Rust in Git 3.0 een verplichte bouwafhankelijkheid zal zijn. Dat is een grote verandering, aangezien Git al enige tijd optionele ondersteuning voor Rust biedt.
Sinds versie 2.49 is er een foreign function interface aanwezig waarmee Rust-code kan samenwerken met de bestaande C-implementatie. Het verplicht stellen betekent dat elke gebruiker en elke distributie de toolchain beschikbaar moet hebben. Omdat Rust niet op alle systemen werkt en op sommige platformen moeilijk te integreren is, kan dit gevolgen hebben voor de breedte van de ondersteuning die Git biedt. Steinhardt erkent dit. Hij geeft aan dat het doel van het huidige traject juist is om distributies de tijd te geven om zich voor te bereiden.
Naast de introductie van Rust staat er nog een grote wijziging gepland voor Git 3.0. De nieuwe hoofdversie wordt ook het moment waarop SHA-256 de standaard wordt. Daarmee markeert Git 3.0 een belangrijk kantelpunt. Zowel de onderliggende cryptografische basis als de gebruikte programmeertalen worden aangepast. Dit moet het project toekomstbestendig.