Názor ke článku Podporuji monopol Microsoftu II od LO - [74] Bezpečnost je dána řadou věcí. Většina současných...

  • 11. 10. 2007 23:02

    LO (neregistrovaný)

    [74] Bezpečnost je dána řadou věcí. Většina současných expoitů ale stojí na problémech jazyka C/C++. Managed code situaci do značné míry řeší.

    Dnes potřebujeme hlavně *výrazně* zvýšit spolehlivost. Už jsem na root.cz několikrát psal, že managed jazyky mimo jiné umožňují zaručovat vlastnosti kódu. Například u metody objektu můžete zajistit, aby (bez ohledu na vstupní data) nikdy nezapsal mimo privátní a výstupní proměnné. Můžete zavést invarianty (třeba v předchozí větě popsaný memory invariant), a máte je fakt zaručené. U C/C++ stačí jeden strcpy, jediný přístup do pole, a analýzou už nezjistíte vůbec nic (může dojít k přepsání čehokoliv).

    Obecně je možné managed kód modelovat jako stavový automat, a porovnávat ho s návrhem. Samozřejmě vzhledem k množství stavů je nutné to dělat po částech, ale asi je jasné, že i to má zásadní důsledky. Následně je možné v managed jazyku třeba zjistit, zda v daném kódu kdy může dojít k deadlocku. A pokud zjistíte, že k němu dojít nemůže, tak k němu fakt dojít nemůže (ne že na vstup pošlete o 1000 větší integer, a kód zapíše do paměti někam úplně mimo, a vše je v háji). Lze také porovnávat specifikaci (tedy stavový diagram jako reprezentaci designu) s implementací. Na tomhle pracuje mimo jiné skupina FSE (Foundations of Software Engineering). Veřejně dostupnými výsledky této skupiny jsou Spec Explorer, Pex a AsmL. Porovnejte tento přístup se stylem "tak po sobě ten zdroják ještě jednou přečtu", případně "kompiluje to, nepadlo mi to, tak to zkusím vypustit".

    Výkon managed code lze zásadně zvýšit tím, že se procesy oddělí výše popsaným způsobem (při kompilaci je ověřeno, že kód nehrabe mimo své stavové proměnné), což minimalizuje overhead context switche.

    MS má OS napsaný v C# (pravda, zatím technologie není zralá pro trh). Převádí aplikace ve Windows pod .NET, a nové části platformy píše v .NETu a pro .NET. Odstavil MFC, postupně utlumuje Win32 API, a nové features uvádí jen pro .NET. Když chcete psát aplikaci pro Windows v C++, MS vás vede k C++/CLI (Common Language Infrastructure), kde používáte .NET jako primární API. Proč si myslíte, že to MS dělá? Protože se nějakému managerovi zalíbila písmenka N, E a T, nebo proto, že velmi dobře ví, že tato technologie je (na rozdíl od C/C++) cestou vpřed?

    Lidé ze Systems and Networking Research Area (včetně těch z Operating Systems Group, kteří si hrají se Singularity) se dnes snaží přijít na to, co v budoucnu dělat se stroji s tisíci jader/CPU.


    No, to bychom měli MS. Jak si stojí komunita? Pracuje už na implementaci prioritizace I/O operací, když už má žurnálový FS? Jakou budoucnost technologie komunita nabízí, a co pro to dělá?