Incident Knight Capital in slaba programska oprema, ki poganja svet
Matej Huš
13. avg 2012 ob 12:31:37
Od polmilijardne katastrofe, ki jo je podjetju Knight Capital povzročil hroščat algoritem za visokofrekvenčno trgovanje, je minil že dober teden. O incidentu je znanih več podrobnosti, hkrati pa se vsiljuje cel kup vprašanj, ki presegajo borzni parket. Knight Capital je programsko opremo razvijal v časovnem primežu. Newyorška borza (NYSE) je 1. avgusta začela uporabljati nov informacijski sistem Retail Liquidity Program za velike stranke, kar je terjalo prilagoditev programske opreme tudi na strani borznih hiš. Knight Capital je očitno zaostajal z razvojem, zato so bili pred sredinim (1. 8. 2012) začetkom trgovanja pred preizkušnjo bodisi zamakniti zagon lastnega sistema in tvegati osip strank bodisi lansirati nepreverjen program. Izbrali so katastrofalno narobe in v pol ure izgubili pol milijarde dolarjev.
V oči pa bode zlasti časovno okno. Posli se sklepajo v milisekundnih intervalih, kjer je pol ure cela večnost. NYSE je Knight Capital na neobičajen promet in čudne posle opozorila že dve minuti po začetku trgovanja ob 9.32 po lokalnem času. Nerazumljivo je, da je trajalo kar pol ure, da so sistem izključili. Ker so na kocki ogromni zneski, načeloma vsa podjetja zahtevajo, da imajo vsi njihovi programi gumb za takojšnjo prekinitev trgovanja (kill switch). The New York Times poroča, da novi program ni imel tega gumba, kar je že druga v vrsti nerazumnih napak (prva je vsekakor pomešanje povpraševanja in ponudbe, bid in ask). Še zlasti je to čudno, ker je navadno prvi dan delovanja novega sistema v pripravljenosti kup sistemcev in drugih strokovnjakov, ki budno spremljajo, da programi ne počnejo neumnosti.
Da bo mera polna, pa je SEC (ameriški ATVP) napovedal preiskavo, saj ima Knight Capital kot eden največjih zagotavljavcev likvidnosti (market maker) pogodbene obveznosti, ki naj jih v tem času ne bi izpolnjevali. SEC preiskuje tudi, kdo je odgovoren za polurni zamik med odkritjem napake in izključitvijo programa. H Knight Capitalu se mnogo strank še vedno ni vrnilo. Delnice podjetja so izgubile okoli 70 odstotkov vrednosti, podjetje mora pokriti 440 milijonov dolarjev škode, zato se jastrebi že zbirajo in pripravljajo na nakup Knight Capitala. Trenutno se podjetje le s težavo vleče iz dneva v dan, pogoji za kratkoročno financiranje pa so zelo hudi.
Marsikdo si zastavlja vprašanje, ali je razvoj absolutno varne in nehroščate programske opreme sploh mogoč. Odgovor je bržkone ne, a se lahko temu idealu zelo dobro približamo. Letalska industrija je na tem področju pionir, saj so tam vložki največji. Čeprav so se že dogajali incidenti zaradi tehnike, je šlo v teh primerih za nerazumevanje pilotov, kaj jim avionika sporoča ali želi od njih, medtem ko zaradi izključno računalniške napake ni strmoglavilo še nobeno letalo. Razvoj je tu precej rigiden, vsaka vrstica kode, za pisanje katere tako ali tako veljajo visoki standardi, pred implementacijo pa podvržena več pregledom strokovnega očesa in zatem uram testiranja. Rešitve so, a so zelo drage. Programe je treba pisati v okolju, kjer je spoštovano kakovostno delo, kjer je pregled kode nekaj običajnega, kjer je testiranje zelo pomemben del razvoja itd. To pa stane in ne daje takojšnjih rezultatov, ampak preprečuje milijardne katastrofe v nedoločljivi prihodnosti. Zgled za pisanje dobre kode je NASA, kjer je bil proces nastajanja kode za raketoplane dodelan do potankosti, ključne točke pa so hierarhija in zdrava mera tekmovalnosti, načrtovanje, sledljivost sprememb, dokumentacija, odpravljanje napak in vzrokov, ki so pripeljali do njih. Rezultat: 420.000 vrstic dolg program ima eno napako - komercialni program bi jih imel nekaj tisoč.
Teče torej večina naših naprav na malomarni programski opremi? Zelo verjetno. Ko pomislimo na programe, si predstavljamo Windows, Google in pametne telefone, mogoče celo bankomate, a to je le vrh ledene dobe. Vse od dvigal, letališč, elektrarn, industrijskih obratov do semaforjev krmili programska oprema. Nekdo jo je moral napisati in povsem zagotovo lahko trdimo, da večina te programske opreme ni bila podvržena strogim standardom letalske industrije. Fiasko Knight Capitala ni edini tovrstni primer; spomnimo se na 350-milijonsko luknjo švicarskega UBS-a, ker so sistemi zatajili med začetkom kotacije Facebooka. Leta 1999 je Mars Climate Orbiter po 10-mesečnem potovanju že prvi dan zgorel v Marsovi atmosferi, ker so inženirji spregledali, da plovilo pričakuje navodila v kilogramih in metrih, z Zemlje pa so jih pošiljali v funtih in inčih. Še bolj spektakularen je bil prvi let evropske rakete Ariane 5 leta 1996, ko je po 10 letih razvoja po vsega 37 sekundah zgorela, ker je program poskusil stlačiti 64-bitno število s plavajočo vejico v 16-bitno celo število (Ariane 5 so seveda kasneje dokončali in danes nosi satelite v vesolje).
V resnici je slabe programske kode ogromno, a dokler posledice niso milijarde škode ali človeške žrtve, tega nihče ne opazi. Oziroma prevod v Slovenijo: najemanje študentov za štiri evre na uro za pacanje programske kode je podobno, kot če bi študentje prevajali deklaracije na zdravilih. (Pa saj oboje že počno!) Isti vzorci se na višjih ravneh le ponavljajo.