0) Inet je komunikace jako každá jiná. Vykání k tomu patří stejně, jako v běžném životě. Pryč jsou doby FIDO a začátků inetu. I email se dnes považuje za skoro rovnocenný klasickému dopisu.
1) Ano, některé věci se staticky rozhodnout nedají. Tam se to řeší dynamicko kontrolou. Nemusí se ověřovat vše vždy před přístupem. Například u for cyklu stačí dynamicky zkontrolovat, zda nedojde k indexaci mimo rozsah pole, a pokud zjevně nedojde, tak nechat cyklus proběhnout. To je ovšem řešeno již na úrovni kompilátoru MSIL do native code.
2) Ano, technicky máte pravdu.
3) Je dobré psát kernel tak, aby race conditions neměl. Windows jsou stabilní s preemptivním kernelem. Chápu, že když se tento problém neřeší při návrhu, ale později ad hoc, tak jsou výsledky řekněme rozpačité. To je holt specifikum vzniku Linuxu. HW drivery by měly být v pohodě, minimálně ty certifikované (na server snad nikdo jiné nedá). MS nabízí i nástroje pro statickou analýzu kódu driveru (PREfast, Static Driver Verifier).
E) To jsem nevěděl, Linux až tak nesleduji. O ionice jsem toho moc nezjistil. Zato o Windows jsem zjistil, že priorita I/O propadá až na drivery, a u nové verze NCQ se bude na prioritu brát ohled (bude součástí requestu). Dále ve Windows máme aplikační API, které umožňuje nastavit I/O priority na úrovni procesu (SetPriorityClass), treadu (SetThreadPriority) i konkrétního file handle (SetFileInformationByHandle). Když systém swapuje, umí odlišit prioritu požadavku (při nedostatku paměti zřejmě high). Utility dodávané se systémem podporují prioritu I/O, například defragmenter. Jak je na tom ionice?