Názor ke článku Strašlivý exploit na 2.6.17 - 2.6.24! od Rejpal - [38]: Co to je "přezpracovaný Lisp"? Ty stroje...

  • 11. 2. 2008 16:24

    Rejpal (neregistrovaný)

    [38]: Co to je "přezpracovaný Lisp"? Ty stroje měly podporu "lispového strojáku", ale zase tak exotické nebyly. Myslím, že podpora "managed" jazyků (jak se jim dnes módně říká) by v dnešní době nebyla tak obtížná. Stačí se podívat na Jazelle RCT, poměrně elegantně řeší některé z problémů, které se obvykle řeší instrumentací kódu nebo statickou analýzou (která není u dynamických objektových jazyků s mutable daty vždy možná, ač je samozřejmě žádoucí ji provádět v maximální možné míře, jak kvůli včasnému záchytu chyb, tak i kvůli optimalizacím), jenže na úrovni HW (paralelní kontroly dat). A přitom podle vývojářů ARMu zabírá jen několik kilohradel. Problémem je spíš setrvačnost průmyslu a díky kultuře světa Windows i požadavek na binární kompatibilitu. Na druhou stranu, vývoj HW je stále ještě zdlouhavější než vývoj SW.

    Na druhou stranu, mít nezbytnou část kódu v Cčku a zbytek ve vyšším jazyku taky IMHO není žádná hanba. :-) Můj oblíbený kompilátor Lispu má v Cčku asi 20000 řádků nejnutnějšího přístupového kernelu (platformně závislé rozhlaní k OS, precizní generační garbage collector, kód definující přístup k jednotlivým typům lispových objektů a podobné skopičiny) a zbylých asi 300000 řádků základního kódu je v Lispu. To není tak špatný poměr, a ten kernel se odladit dá. Vlastně už odladěný je, a to při mnohem menším počtu uživatelů, než kolik lidí má PCčko s Windows, a při mnohem menším počtu lidí, co na něm pracují (řádově jednotky vývojářů po dobu patnácti let). Dnes je schopný se zotavit prakticky ze všeho, běžně kompiluji funkce s "nebezpečným" nastavením (declare (optimize (safety 0))) a následně je spouštím s neočekávanými daty, jen abych se přesvědčil, že drží a zatím se mi nikdy nepodařilo ho sestřelit. Nanejvýš mi vynadá, že ty segfaulty nemám dělat, a bezpečně odroluje zásobník interaktivního threadu zpět do příkazového řádku, a všecho ostatní je nedotčené. (Tedy pokud explicitně nepeekuju a nepokeuju jako kdysi v Basicu :-), kterýžto mechanismus tam je pro vnitřní potřebu kompilátoru, ale není programátorovi řízením přístupu ("private" funkce) zcela zapovězen, neb se předpokládá, že programátor není nesvéprávný.)

    Vím o lidech, kterým Lisp běží jako dlouhodobý proces celé měsíce, mezitím v něm testují kód, a přitom jim v jiných vláknech běhají menší "provozní" servery, aniž by s tím byly problémy - jako u dobrého OS. Samozřejmě, neřeší to softwarovou izolaci škodlivého kódu (pořád je to jen jeden proces, což má svoje dobré i špatné stránky), ale *rozšířením* tohoto konceptu vzniknou singularitoidní SIPs, což je, myslím, do budoucna docela slibná cesta.