Aniž bych chtěl shazovat práci lidí kolem Fil-C, tak to jejich runtime přístup má zase jiné nevýhody. Protože můžou chytit zápisy mimo oprávněný prostor, ale bez sémantických informací (void* toho moc nesděluje) navíc jen hádají. Stejně tak neodhalí chyby souběhu. Jen zareagují, když náhodou nastanou.
Takže ano - je to pak asi bezpečnější z hlediska exploitů. Ale uživatel bude stejně naštvaný, protože program spadne. A ty runtime kontroly taky sníží výkon, což se třeba u coreutils dost řeší.
Cílem je kompletní memory safety - tady se to autor snaží dotáhnout mnohem dál než v Rustu.
S těmi runtime kontrolami máte pravdu, jenže AFAIK není žádný rozšířený jazyk, který by se tomu vyhnul. I safe Rust ošetřuje různé věci za běhu (např. meze pole, nebo vás nutí zamykat, i když žádný souběh nehrozí, nebo musíte zbytečně klonovat objekty, abyste uspokojil typový systém).
To, že se něco musí dělat v runtime ale není argument pro to, že by se tam mělo dělat všechno.
BTW, memory safety by neměl být cíl ale jen implementační detail na cestě ke spolehlivějšímu softwaru. A pád programu na hubu může být i větší problém, než přístup mimo hranice pole. Záleží na tom, co ten software dělá.
Já to beru jako SW, co nejde tak snadno ovládat útočníkem. Osobně mi nepřijde, že by memory safety korelovala se spolehlivostí.
Memory safety vlastně ani není přesně definována. Např. C program mohu odsimulovat v Rustu uvnitř velkého pole, které bude sloužit jako paměť programu. Je takový program memory safe? A pokud ano, je to k něčemu?
Ovládnutí ale není jediný možný útok. Co třeba DoS? Tam sestřelení bohatě stačí.
A s tou vágností memory safety naprosto souhlasím. Celou memory safety si můžeme dát vycpat, pokud program nedělá to, co od něho potřebujeme. A tady vidím zásadní rozdíl mezi přístupem Rustu a Fil-C. Sadomaso kompilátor je víc prevence, zatímco hlídaný běh spíš damage control.
Sice je tam jistý překryv, ale rozhodně nedělají stejnou věc jiným způsobem.
> A tady vidím zásadní rozdíl mezi přístupem Rustu a Fil-C. Sadomaso kompilátor je víc prevence, zatímco hlídaný běh spíš damage control.
Souhlasím pro Rust bez unsafe. Bohužel unsafe je ale prakticky ve všech programech - nějde bez něj zavolat systémovou funkci, pokud chcete dynamic linking, tak Rust nemá stabilní ABI, takže musíte použít cdylib, které opět nejde volat bez unsafe. I kdybychom předpokládali, že unsafe ve standardní knihovně je v pořádku, tak z balíčků na crates.io má cca 20 % unsafe kód. Naneštěstí je psaní unsafe kódu v Rustu vcelku složité, takže je vcelku pravděpodobné, že tam jsou chyby.
Proč myslíte? Vždyť už dnes s tím přeložíte a zprovozníte mnoho programů. Linuxové jádro ještě ne, ale userland ano - viz distribuce Pizlix.
AFAIK nikdo jiný se nedostal dál. A to je to one-man show. Když to srovnáte třeba s Rustem - kolik lidí na něm pracuje a zatím ani jeho safe podmnožina není memory safe a můžete tam udělat třeba use after free (15 let známý bug).
> A jak to nasadím? Musím si přeložit úplně všechny knihovny, které můj software chce používat?
Ano, musíte přeložit vše. Jedna z instalačních metod je stáhnout vše do /opt/fil a provozovat vedle stávajících programů z jiné distribuce. Např. takhle můžete provozovat sshd.
> Používá se to už někde v produkci?
Slyšel jsem, že pro OpenSSH a pro Lighttpd.