VulCode

Rust: co w nim budujemy i dlaczego

Rust piszemy tam, gdzie błąd kosztuje najwięcej: rdzeń platformy hostingowej, kryptografia komunikatora, serwer licencji i narzędzia, które działają latami na cudzych maszynach.

Rust na prawdziwych zrzutach

Projekty z tej strony na ekranach z portfolio i case studies, każdy z krótkim opisem i drogą do pełnego.

Faktury i korekty w panelu Flaem: dokumenty wysłane do KSeF razem z ich stanem

Flaem: rdzeń platformy

API panelu, sklep, rozliczenia, KSeF i orkiestracja węzłów.

Rozmowa grupowa w Plazerze: wiadomości, ankieta, nagranie głosowe i wątek z boku

Plazer: rdzeń MLS

Szyfrowanie grup według RFC 9420, kompilowane też do WebAssembly.

Kiedy Rust, a kiedy coś innego

Technologia ma pasować do miejsca, w którym kod będzie działał, i do zespołu, który go przejmie. Ostateczny wybór zapada przy wycenie, razem z Tobą.

Wybieramy Rust

Rdzeń z pieniędzmi i uprawnieniami

API, sklep, rozliczenia i KSeF w rdzeniu Flaem są w Ruście. Błąd i brak wartości są tu częścią typu, więc kod musi je jawnie obsłużyć, zanim trafi na serwer.

Jedna kryptografia dla wszystkich aplikacji

Rdzeń Plazera z szyfrowaniem MLS to jedna biblioteka w Ruście: przeglądarka dostaje ją jako WebAssembly, aplikacje natywne przez UniFFI. Protokół ma jedną implementację, a nie osobną w każdym języku.

Zapytania sprawdzane przy kompilacji

W rdzeniu Flaem sqlx porównuje zapytania SQL ze schematem bazy już przy budowaniu. Literówka w nazwie kolumny albo zły typ wychodzi przed wdrożeniem, a nie na produkcji.

Kod, który czyta dane od obcych

Serwer licencji z tokenami Ed25519 i protokół komunikatora przyjmują dane z sieci od każdego. Bezpieczny Rust nie dopuszcza przepełnienia bufora ani użycia zwolnionej pamięci, więc ta klasa luk znika z kodu.

Narzędzia w terminalu

vulp obsługuje wiele repozytoriów z jednego terminala, z interfejsem w ratatui. Program to jeden plik binarny: użytkownik niczego nie doinstalowuje, a narzędzie startuje od razu.

Lekkie aplikacje desktopowe

Gyred w Dioxusie i studio w Tauri korzystają z przeglądarki systemu, zamiast dołączać własną. Program otwarty przez cały dzień zostawia pamięć innym aplikacjom, a cięższą pracę wykonuje kod w Ruście.

Wybieramy coś innego

Strona firmowa albo landing

Stronę firmową budujemy w TypeScripcie i React z prerenderem: treść jest w pierwszym HTML, a tekst czy sekcję poprawi potem każdy programista webowy. Rust niczego tu nie dodaje, a zawęża grono osób, które mogą pracować nad stroną.

Prototyp do sprawdzenia pomysłu

Gdy model danych zmienia się codziennie, kompilator Rusta każe przy każdej zmianie poprawić wszystkie zależne miejsca. Prototyp piszemy w TypeScripcie, a do Rusta przenosimy to, co się obroni.

Panel z dziesiątkami ekranów

Panel Flaem jest w React i TypeScripcie nad API w Ruście. Interfejs zmienia się najczęściej, a ekosystem Reacta ma gotowe biblioteki formularzy, tabel i wykresów.

Agent na tysiącach maszyn

Agent VPS i demon kontenerów Flaem są w Go. Agent potrzebuje głównie sieci, limitów czasu i ponawiania, a prosty kod w Go szybciej się kompiluje i łatwiej go przejąć.

Bot Discord albo skrypt operacyjny

Bot VulCode i skrypty diagnostyczne są w Pythonie. Poprawka to edycja pliku na serwerze, bez kompilacji i wydawania nowej wersji.

Dodatek do cudzego systemu

System gospodarza ładuje dodatki we własnym języku: moduł do WHMCS piszemy w PHP, plugin Minecraft w Javie, a plugin do SCP: Secret Laboratory w C#. Rust nie ma tam wstępu.

Rust w porównaniu, punkt po punkcie

Każda potrzeba w jednym wierszu, a obok siebie to, co w tej sprawie daje każda z dwóch kolumn.

PotrzebaRustTypeScript na Node

Długo działający serwis z pieniędzmi

Pierwszy wybór
Dobry, z większą dyscypliną testów

Kryptografia w przeglądarce

WebAssembly z tego samego kodu
Biblioteki JS, osobny kod dla natywnych

Szybka strona firmowa

Przesada
Pierwszy wybór

Narzędzie w terminalu

Jeden plik binarny bez środowiska
Wymaga Node u użytkownika

Ciężkie obliczenia w serwisie

Wszystkie rdzenie procesora, wyścigi danych nie przechodzą kompilacji
Blokują pętlę zdarzeń, trzeba osobnego workera

Ludzie do utrzymania kodu

Mniej programistów, potrzebna dokumentacja i testy
Najłatwiej o zespół

Pierwsza wersja

Wolniejszy start, mniej poprawek po wdrożeniu
Szybszy start, więcej testów po drodze

Rust w całym naszym kodzie

Ile linii napisaliśmy w Rust i jaką część wszystkiego, co napisaliśmy, to stanowi. Liczymy linie dodane w commitach naszych repozytoriów, osobno dla każdego języka.

995 825
linii napisanych w Rust
18,5%
wszystkich linii, które napisaliśmy
11
repozytoriów z kodem w Rust
2.
miejsce wśród 26 języków

Biblioteki, na których stoją te projekty

Z plików zależności naszych repozytoriów. Przy każdej jedno zdanie o tym, do czego jej używamy.

Pulpit operatora Flaem: sprzedaż, przychód miesięczny i węzły na żywo
Dyżur w aplikacji Flaem na telefonie: alarmy z przyciskami działań i kolejka zgłoszeń
  • tokio, axum, tonic

    Serwer HTTP i gRPC w rdzeniu Flaem.

  • sqlx

    Zapytania do PostgreSQL sprawdzane przy kompilacji.

  • mls-rs

    Protokół MLS w rdzeniu Plazera.

  • ed25519-dalek, aes-gcm, argon2

    Podpisy, szyfrowanie i hasła.

  • ratatui, clap, git2

    Interfejs terminala i operacje git w vulp.

  • Tauri, Dioxus

    Aplikacje desktopowe.

Nasze zmiany w cudzych projektach w Rust

10 przyjętych zmian w 6 repozytoriach. Opiekunowie tych projektów przejrzeli nasz kod i włączyli go do swojego.

Tydzień po tygodniu

Udział języków w naszych zmianach

Inne technologie i gdzie działa ich kod

Każda ma swoją stronę z projektami na prawdziwych ekranach i porównaniem z alternatywami.

Strony i aplikacje webowe

To, co widać w przeglądarce, i jego zaplecze.

Aplikacje mobilne

Natywne klienty Android i iOS.

Aplikacje desktopowe

Programy na Windows, macOS i Linux bez przeglądarki w środku.

Backend i infrastruktura

Rdzenie, agenty na serwerach i usługi czasu rzeczywistego.

Boty i automatyzacje

Discord, skrypty i monitoring.

Pytania o Rust

Odpowiedzi o Rust, naszych projektach i liczbach na tej stronie.

Projekt w Rust?

Opisz, co chcesz zbudować. Odpiszemy w godzinę i powiemy wprost, czy ta technologia jest dobrym wyborem.