Hopp til hovedinnhold

Rust-utvikling

Backend-tjenester i Rust for situasjoner der ytelse, minnesikkerhet og forutsigbar drift betyr mer enn rask prototyping — fra API-er til tjenester som kjører uten tilsyn i månedsvis.

Håndtegnet illustrasjon for Rust

Verktøy og rammeverk vi bruker

  • Rust
  • Axum
  • Tokio
  • SQLite og rusqlite
  • BDK (Bitcoin Dev Kit)
  • rust-bitcoin og secp256k1
  • Electrum
  • JWT, Argon2 og TOTP
  • rust-i18n
  • Nostr
  • Docker

Rust for backend-tjenester som skal være stabile

Rust gir ytelse på nivå med C og C++, men med et typesystem som forhindrer minnefeil og datakappløp allerede ved kompilering. Det gjør språket godt egnet for tjenester som skal kjøre lenge uten tilsyn, håndtere sensitive data eller tåle høy last uten å bruke unødvendig mye ressurser.

Vi har brukt Rust over tid i egne open source-prosjekter. Canary er en selvhostbar tjeneste for å overvåke bitcoin-lommebøker uten tilgang til private nøkler, med rundt 1 800 commits. Den er bygget med Axum og Tokio, bruker BDK og Electrum for å følge med på blokkjeden, og har innlogging med JWT, Argon2 og TOTP, varsler på e-post og Nostr, flere språk med rust-i18n og pakker for StartOS og myNode. Canary Mining er en Stratum V2-server for solo-mining som snakker med Bitcoin Core over IPC.

Rust, Go eller TypeScript — når vi anbefaler Rust og når vi ikke gjør det

Rust er et godt verktøy, men ikke et standardvalg. Vi anbefaler det når minst ett av disse kravene veier tungt:

  • tjenesten skal kjøre i måneder uten tilsyn og håndtere nettverksfeil uten å stoppe
  • den håndterer nøkler, innlogging eller finansielle data, der en minnefeil kan bli en sårbarhet
  • den skal kjøre på begrenset maskinvare, for eksempel hos brukere som selvhoster
  • en avgrenset komponent er en flaskehals for ytelse eller minnebruk

For vanlige CRUD-API-er, interne verktøy og produkter der kravene fortsatt endrer seg raskt, anbefaler vi det sjelden. Der gir TypeScript eller C# raskere fremdrift og et større utvalg av utviklere. Go er et godt mellomstandpunkt for nettverkstjenester som skal være enkle å lese og drifte, med kortere læringskurve enn Rust.

Prisen for Rust er lengre kompileringstider, en brattere læringskurve og færre utviklere å rekruttere fra. Den er verdt å betale når feil i produksjon er dyre — ikke ellers.

Minnesikkerhet og sikkerhetskritisk backend

Mange sårbarheter skyldes minnefeil. Rust fjerner de fleste av dem, men sikker programvare krever mer enn et trygt språk. Vi legger vekt på sikker lagring av passord med Argon2, tofaktorautentisering, minimal tilgang til sensitive data og avhengigheter som er modne og godt vedlikeholdt. I Bitcoin-sammenheng betyr det for eksempel å bygge løsninger som bare trenger offentlige nøkler og deskriptorer, slik at tjenesten aldri har tilgang til midlene den overvåker.

Typiske oppdrag

Langvarige bakgrunnstjenester

Tjenester som overvåker, synkroniserer eller varsler døgnet rundt, og som må håndtere feil i nettverk og eksterne systemer uten å stoppe.

Sikkerhetskritiske backends

API-er som håndterer innlogging, nøkler eller finansielle data, der Rusts typesystem og minnesikkerhet fjerner hele klasser av feil.

Ytelseskrevende komponenter

Enkeltkomponenter som må være raske eller bruke lite minne, skrevet i Rust og koblet til et eksisterende system.

Programvare for selvhosting

Tjenester som skal kjøre på brukerens egen maskinvare, pakket med Docker og for plattformer som StartOS og myNode.

Relevant erfaring

Prosjekter og åpen kildekode der teknologien er brukt i praksis.

Åpen kildekode

  • canary

    Selvhostbar overvåking av bitcoin-lommebøker uten tilgang til private nøkler, med varsler på e-post og Nostr. Skrevet i Rust med Axum, Tokio og BDK.

  • canary-mining

    Selvhostet Stratum V2-server for solo-mining mot Bitcoin Core via IPC, skrevet i Rust.

Vanlige spørsmål

Når lønner det seg å velge Rust?

Rust passer best når tjenesten skal kjøre lenge, håndtere sensitive data eller ha høye krav til ytelse og ressursbruk. For enkle CRUD-tjenester eller raske prototyper er TypeScript eller C# ofte et mer praktisk valg.

Kan dere skrive deler av et eksisterende system i Rust?

Ja. Vi kan skille ut en avgrenset komponent, for eksempel en bakgrunnsjobb eller en beregningstung tjeneste, og koble den til resten av systemet via et API eller en kø.

Hvilke rammeverk bruker dere?

For web-API-er bruker vi som regel Axum på Tokio, med SQLite eller Postgres som database. Valget av biblioteker avhenger av domenet, og vi foretrekker modne og godt vedlikeholdte avhengigheter.

Hvordan tester dere Rust-kode?

Vi kombinerer enhetstester med integrasjons- og systemtester som kjører tjenesten mot ekte avhengigheter i testmiljø. Testene kjører automatisk i CI ved hver endring.

Er Rust vanskelig å vedlikeholde for teamet vårt?

Rust har en brattere læringskurve enn mange andre språk, men kompilatoren fanger mange feil tidlig. Vi skriver tydelig kode, dokumenterer valgene og kan hjelpe teamet med å bli trygge på kodebasen.

Trenger dere hjelp med Rust?

Fortell kort om produktet, teamet eller systemet. Vi svarer med et konkret forslag til neste steg — enten det er en hel leveranse, senior kapasitet i teamet eller tekniske råd.

E-postadressen og meldingen brukes bare til å svare på henvendelsen din.

Telefon
920 50 946
Sted
Oslo, Norge