sobota, dubna 29, 2006

Trocha poctivé demagogie

Takže další kolo. (Než se pustíte do dalšího čtení, doporučuji vaší pozornosti poměrně zajímavý komentář uživatele Q, který jste třeba přehlédli.)

Problém s celou věcí je v tom, že naprostá většina lidí se otázkám, v nichž nějak figuruje Microsoft, nedokáže vyhnout zpolitizování věci, a tak, místo abychom se tu bavili o tom, jak obecně přistupovat k podobnému druhu chyb, kterým se někdy prostě nedá vyhnout, a může se s nimi setkat každý vývojář, řešíme nějaké zbytečné spory ve smyslu katedrála vs bazar, uzavřený vs otevřený, Microsoft vs Samba. Uznávám, mám na tom svůj díl viny, protože jsem si nedokázal odpustit trochu té infantilní jedovatosti (a protože je mi bližší Joel Spolsky než Paul Graham, jsem nutně vychýlený na stranu -- jak to bylo? -- jedné dominantní firmy).

Co mě osobně na celém problému nejvíce zaujalo, je to hledání metody, jak s podobnou chybou naložit. Upřímně řečeno -- nevím. Myslím si, že uživatelé mají právo na zpětnou kompatibilitu, současně ale souhlasím s tím, že zrychlení operací FindFirstFile, FindNextFile je žádoucí, a že po něm korporátní zákaznící Microsoftu touží, a neměli by o něj být připraveni. Myslím, že není správné vyhazovat message box u takových operací jako je vylistování obsahu adresáře, ale přitom chápu, že spamování error logu není řešením pro domácí uživatele, kteří najednou neuvidí své soubory, a kteří nevědí (a nechtějí vědět) nic o tom, co je to nějaká Samba, nebo jakým způsobem Explorer zjistí které soubory jsou ve kterém adresáři. Souhlasím s tím, že nejlepším řešením je opravit instalace vadné Samby, ale nejsem si úplně jistý, jestli je to realizovatelný požadavek u jednoúčelových fileserverů, které firmy (s Linuxem ve ROM/flash paměti) chrlí po desítkách tisíců.

Jak říkám -- nevím jak takovou situaci řešit. Proto mě celý problém zaujal, protože jsem si myslel (a pořád si to myslím), že se dovím, jak se v takové situaci zachovají (ať už se to někomu líbí nebo ne) ti nejlepší programátoři a softwaroví obchodníci na planetě.

Pokud jde o to, jestli samba-team musel nebo nemusel reverzně inženýrovat (ha!) protokoly Microsoftu: Microsoft má svaté právo nechat si své protokoly pro sebe. Nejsem tak kovaný v historii operačních systémů, abych to mohl říct určitě, ale domnívám se, že snahou MSFT v době, kdy "SMB" vznikalo, bylo primárním úkolem zlikvidovat konkurenci ztělesňovanou firmou Novell. Myslím si, že v té době, nikdo nezveřejňoval specifikace svých protokolů, protože se to prostě nedělalo, a jejich utajení a vzájemná nekompatibilita byly považovány za konkurenční výhodu (jako tomu donedávna bylo -- a leckde stále ještě je -- u instant messaging aplikací a protokolů). Od těch blažených devadesátých let se lecos změnilo, a dnes se naopak protokoly zveřejňují a velké firmy se stávají členy konsorcií, kde se protokoly a formáty domlouvají ke všeobecné nespokojenosti. Je to jako s programováním -- od rigidního stylu vše bude naplánováno, pak implementováno, nakonec otestováno, a co si zákazník nevymyslí hned zkraje, to mít nebude se postupně přechází k extrémnímu programování, které říká neplánujte nic, napište pár testů a uvidíte co z toho vzejde.

Stejně jako se za těch deset patnáct let změnila představa ideálního programovacího stylu, změnila se i představa ideálního přístupu k protokolům. Dříve nepředstavitelné zveřejňování obchodních tajemství se dnes stalo všeobecným standardem, a firmy sázejí víc na to, že nabídnou synergické řešení všech problémů, které bude zákazníky demotivovat od nákupu produktů konkurence (pravým důvodem proč používat Outlook není příjem pošty, ale propojení s Exchangem a zbytkem balíku Microsoft Office, důvodem proč nepoužívat OpenOffice.org není těch 1397 funkcí, které má Excel navíc, ale absence návaznosti na Exchange a další produkty Microsoftu).

Abych to shrnul: Vývojáři Samby v diskusi pod Chenovými příspěvky sami přiznali, že chyba nevznikla proto, že by neznali protokoly Microsoftu (který je prý už docela obstojně dokumentuje a s týmem Samby snad i spolupracuje), ale proto, že prostě udělali normální stupidní chybu (nějaký ten zapomenutý case ve příkazu switch()). Údajně zabrala oprava chyby (včetně testování) asi tři minuty. (Což mi připomíná, že, pokud jsem to správně pochopil, problém není v tom, že by listování adresáře nevyhodilo chybu. Problém je v tom, že ji vyhodí i když nemá!)

Blog Old New Thing se problémem zpětné kompatibility zabývá poměrně často. I proto ho čtu -- protože mi stále připomíná, že opravit chybu někdy nestačí...