Programmering

Kom godt i gang med Rust i Windows-programmering

Kunne Microsoft skifte fra brugen af ​​C, C ++ og C # til andre sprog? Et nyligt blogindlæg fra Microsoft Security Response Center (MSRC) foreslog, at det meget vel kunne se på alternativer med det formål at reducere risikoen for dets kode. Som Gavin Thomas, den primære sikkerhedstekniske leder hos MSRC, bemærkede, at en af ​​hovedårsagerne til fejlene i Microsoft-kode rapporteret til MSRC er hukommelseskorruption, bugs der lader hukommelse overskrives eller få adgang til hvad der skal beskyttes hukommelse.

Opbevaring af hukommelse

Hukommelsessikkerhed har været et vigtigt problem i lang tid, men det statistiske arbejde udført af MSRC viser, at problemet ikke forsvinder. Du har masser af værktøjer til at skrive sikker kode, lige fra Microsofts egen Secure Development Lifecycle, til brug af nyere hukommelsessikre sprog som C #. Men disse tilgange har deres kompromiser: Koden, de producerer, er langsommere og fungerer på et højere niveau end C ++.

Det er ikke et problem for kundeorienteret kode. Der er ingen perceptuel forskel mellem en C ++ - develoepd brugeroplevelse og en indbygget C #. Men på systemniveau, den kode, der bruges til at opbygge operativsystemer og enhedsdrivere, er der en stor forskel. Processorkredsløb betyder noget, når du arbejder på systemniveau, og som Thomas påpeger i sit blogindlæg, er ubeskyttede sprog som C ++ og C virkelig de eneste værktøjer, der historisk fungerer på det niveau.

Det er klart, at de hukommelsessikre fremgangsmåder, der bruges af sprog på højere niveau, ikke fungerer på systemniveau. Mange af de problemer, der plagede Microsofts abortive Longhorn-projekt, skyldtes forsøg på at opbygge et helt operativsystem på .NET-platformen. Så hvordan kan vi skabe hukommelsessikkerhed til grundlaget for systemudvikling?

Introduktion til Rust

Svaret kommer med en ny generation af systemprogrammeringssprog som Go og Rust, sprog der har et hukommelsessikkert design af .Net med hastigheden C og C ++. Microsoft bruger allerede Go i udstrakt grad i Azure, fordi det er det sprog, Kubernetes er skrevet i. Men disse tilgange har endnu ikke fundet vej til Windows, hvor C ++ stadig er systemprogrammeringskongen.

I sit blogindlæg argumenterer Thomas for at bruge Mozillas Rust som et sikkert systemsprog til Windows. Det er et interessant forslag, og et, der allerede har et stort bevis-punkt i sin favør: Sprogdesigneren Mozilla bruger det allerede i sine nyeste webbrowserudgivelser, hvor det styrer Mozillas nuværende og næste generations gengivelsesmotorer. Andre store Rust-brugere inkluderer JavaScript-modulopbevaringsstedet NPM, Dropbox og Oracle. Selv Microsoft bruger det allerede med rustkode i nogle af dets Azure IoT Edge-værktøjer.

Opsætning af et Windows Rust-udviklingsmiljø

Det oplagte sted at starte med Rust-udvikling er Visual Studio Code. På dens udvidelsesmarked kan du finde flere udvidelser, der installerer Rust Language Server, og som kommer med fuld sprogstøtte samt værktøjer til at opbygge dine Rust-apps fra Visual Studio Code. Jeg har brugt den officielle Rust-udvidelse fra Rust-sprogteamet. Andre værktøjer understøtter kodestykker til kickstart-udvikling samt yderligere fejlfindings- og testværktøjer. Der er endda værktøjer til at bygge dokumentation til din kode. Det er værd at installere Rust-udvidelsespakken som en del af dit Visual Studio Code Ruse-miljø, da dette tilføjer yderligere værktøj til at arbejde med Rusts egne udviklingsværktøjer.

Du skal først installere Rust-kompilatoren og Cargo-pakkehåndteringen. Det officielle Rust-installationswebsted registrerer den version af Windows, du bruger, og giver den relevante download. Der er endda instruktioner til installation af Rust på Windows Subsystem til Linux (WSL), hvis du bruger WSL som en del af en Unix-udviklingsværktøjskæde. Kørsel af Rustup-installationsprogrammet downloader sprogkomponenterne og indstiller Windows STI. Du får mulighed for at tilpasse installationen, men i praksis er det bedst at acceptere standardindstillingerne.

Forståelse af rust og hukommelsessikkerhed

Hvis du programmerede C eller C ++, er overgangen til Rust relativt let. Der er meget lighed mellem sprogene, selvom det er Rusts koncept om ejerskab, der gør det hukommelsessikkert. Ejerskab lader Rust styre omfanget af variabler, så de kun kan være gyldige, mens de er i omfang. Hvis de ikke bruges, er de ikke i hukommelsen. Nogle variabler er bogstavelige, uforanderlige værdier, der er hårdkodede i din kode. Men mere komplekse variabeltyper kan anmode om hukommelse, når de er indstillet, en proces, der på andre mange sprog kræver, at du eksplicit tildeler hukommelse og derefter frigør den, når variablen eller objektet ikke længere er nødvendigt. Rust automatiserer dette og håndterer hukommelsesforbrug som en del af dets omfangsstyring.

Teamet hos Mozilla, der skabte Rust, har tænkt dybt over hukommelsessikkerhed og de kompromiser, der kan ske i et sikkert miljø. Resultatet er et sprog, der er både sikkert og hurtigt med værktøjer, der administrerer både hukommelsesstakke og dynger. Tildeling af en værdi til en funktion ændrer dens ejerskab og flytter den fra et omfang til et andet. en lignende proces styrer værdier, der returneres fra et funktionsopkald.

Ejerskab er et komplekst koncept, men det er vigtigt. Det beskytter hukommelsen, og det lader kun de funktioner, der ejer en værdi, ændre det, selv når du bruger en henvisning til en variabel. Fordi Rust behandler en reference som at låne variablen, vil forsøg på at ændre den kun generere en fejl, medmindre du erklærer, at den kan ændres.

Fremtiden for Rust i Windows

Det er vigtigt at huske, at Rust stadig er et ungt sprog, og meget af det, du tager for givet i Windows-udvikling, er ikke der. Der er ingen direkte integration med Win32 eller andre centrale Windows SDK'er, og du finder ikke support til Windows GUI-værktøjer uden at installere yderligere biblioteker. Det er dog ikke så meget af et problem, som du måske tror: Rust, som Go, er et systemsprogrammeringssprog. Det er et værktøj på lavt niveau, hurtigt og sikkert. Det gør det ideelt til at opbygge kode, der manipulerer dine data, knasende numre og behandle arrays. I stedet for at bruge C ++ - rutiner, hvor du arbejder med store mængder hukommelse, skal du bruge Rust i stedet for at reducere risikoen forbundet med hukommelseskorruption.

Hvis du ønsker at udvikle GUI-applikationer i Rust, har du mulighed for at bruge et af flere UI-biblioteker. Måske er den nemmeste at bruge Kiss-ui, som understøtter både Windows og Linux GUI-udvikling med Win32 API-adgang samt understøttelse af GTK på tværs af platforme. Andre biblioteker tilføjer dybere Win32 API-understøttelse.

Selvom Microsoft ikke ender med at støtte Rust direkte, er der masser af community support. Mens samling af en komplet værktøjskæde stadig kan være et spørgsmål om at vælge de forskellige elementer, du har brug for, og bruge værktøjer som Rustup til at installere dem, ser ankomsten af ​​Visual Studio Code-udvidelser og udvidelsespakker indstillet til at forenkle processen. Regelmæssige opdateringer viser, at dette i høj grad er et live-projekt, hvor Rust-teamet og en lang række tredjepartsbidragere arbejder på det.

Det underliggende princip om at bruge hukommelsessikre sprog er et vigtigt, og det er bestemt godt at se folk på MSRC tage fat på problemet. Indtil der er en officiel frigivelse af et hukommelsessikkert programmeringssprog på lavt niveau, er det bestemt værd at give Rust en gang imellem. Hvis Microsoft vælger det, vil du være langt foran spillet.

Uden for Windows er Rust et nøglesprog til WebAssembly-udvikling og skal hjælpe med at levere meget mere kraftfulde webapplikationer i den kommende Chromium-drevne udgivelse af Edge - en anden grund til at give det et omhyggeligt blik.