Кодът на Windows в Internet
Категория: Интернет
10.2.2004
На 13 февруари два файла, съдържащи код на Microsoft, започнаха да обикалят Internet. Единият съдържа по-голямата част от NT4 кода. Другият файл съдържа част от кода на Windows 2000, по сведения около 15% от целия код. Това включва и някои мрежови кодове като winsock и inet, както и част от кода на ядрото.
Датата на създаване на файловете е 25 юли 2000 година. Кодът от Windows 2000 се съдържа в zip файл с големина 213,748,297 бита, с името windows_2000_source_code.zip, с което се разпространи предимно по PееrТоPееr мрежите. Двата архива заедно имат големина от около 600 MB, което предполага, че са направени за запис на CD.
Microsoft работи заедно с ФБР по случая как кодът е бил взет и кой носи отговорността. Анализ на файловете води до предположението, че софтуерната компания, дългогодишен партньор на Microsoft, Mainsoft би могла да е източник на изтичането.
Преди време от Microsoft предприеха инициатива, наречена Shared Source Initiative. Тази програма позволява на правителствени агенции, университети и частни компании да имат достъп до определени части от кода, които са им необходими за изследвания и разработка на продукти. Кодът се предоставя със стриктни предписания как точно информацията може да бъде използвана. И въпреки сериозните мерки, които се взимат, за повечето експерти е изненадващо, че изтичането на код става едва сега.
Спиране на копирането
Microsoft предприе действия, за да спре разпространението по Internet на въпросния Windows код. Двата файла станаха много популярни сред потребителите на мрежите за чат и обмен на файлове. От софтуерния гигант обявиха, че са предприели стъпки за защита на кода - пуснати са предупреждения и писма, че разпространението на архивите е нелегално. Писма са пратени до някои от индентифицираните притежатели и разпространители на кода. При мрежите за обмен на файлове като Kazaa е сравнително лесно да се проследи кои са хостовете на определени файлове, като се свържат с мрежовите адреси. Всеки, който се опита да потърси кода в такава мрежа, ще види popup съобщение, предупреждаващо, че свалянето на този код е незаконно. Говорител на Microsoft поясни, че писмата и съобщенията просто изтъкват, че кодът е защитен с търговска тайна и не може да бъде разпространяван. В писмото се изисква първо, файловете с кода да не се разпространяват и share-ват и второ, да бъдат изтрити в най-кратък срок. Според MS от писмата вече има положителен ефект.
Много разработчици на софтуер и особено на операционни системи се страхуват да погледнат изтеклия код на Windows. Причината е, че това би могло да се отрази на кариерата им и те да бъдат обвинени в последствие за нарушаване на авторските права. Според извесни юристи обаче, след като веднъж търговската тайна е престанала да бъде тайна, то тя вече не е интелектуална собственост, която може да бъде защитена от закона. Например, ако част от рецептата на Coca Cola бъде разкрита, то тя вече не е търговска тайна.
Защо изтичането на кода е проблем за Microsoft?
- Намаляване на сигурността - свидетели сме как преди месец се появи най-бързо разпространяващият се вирус, както и на откриването на oще една критична уязвимост на операционната система Windows (по-точно IE5).
- Разрастването на Microsoft се дължи на контрола на интелектуалната собственост над кода на продуктите им. Това им помогна да станат основен играч на компютърния пазар. Сега съперниците им имат възможност да добият по-добра идея за това как работи Windows, а това би могло да им помогне в съревнованието.
- Microsoft биха могли да загубят част от клиентите си, които поради проблеми със сигурността или по други причини да решат да преминат на други ОС. Разбира се, част от хората може би при първа възможност ще ъпгрейдват Windows със следваща версия.
- За Microsoft е притеснително появата и публичното разискване на този код. Не на последно място защото сорскодът има доста недостатъци и може да се окаже, че много от разработчиците на Microsoft не са си свършили добре работата. В миналото независими програмисти бяха шокирани от това, което откриха при разглеждане на кода на различни Microsoft приложения. Съперници и критици ще имат възможност да видят как работи екипът на Microsoft.
Дали това ще означава повече проблеми със сигурността на продуктите на Microsoft?
Твърде рано е да се каже. Разбира се, да се знае как нещо функционира, е полезно за тези, които желаят да го атакуват. Все пак на хакерите са необходими по-задълбочени знания за системата Windows. В днешно време много от вирусите са малко преправени стари злонамерени програми. Много малко са създателите на вируси, които ще прегледат милиони редове код, за да намерят нови уязвими места. При това изтеклият код е сравнително стар и вероятно е доста преправен в сегашните версии. От Microsoft твърдят, че въпросът засяга по-скоро интелектуалната собственост, отколкото сигурността.
Съществуват и мнения, че изтичането на кода може да е от полза за Microsoft и да се получи нещо като при софтуера с отворен код - ускорено поправяне на бъгове и уязвимости от голям брой програмисти от цял свят. Разбира се, би било наивно да се смята, че това е умишленодействие от страна на Microsoft. Други слухове не изключват това да е рекламен трик, макар че качеството на кода и коментарите правят тази теза малко вероятна.
Това се вижда ясно при един бърз и повърхностен поглед върху стила и съдържанието на изтеклия код на Windows 2000.
Поглед върху стила и съдържанието на изтеклия код на Windows 2000
Съществуват спекулации, че докато кодът е истински, то коментарите са добавени в последствие, за да се злепостави Microsoft. Това е трудно доказуемо, освен това изглежда нереално. Неудобните коментари се появяват на хиляди редове, на напълно реалистични места. При това, ако някой ги беше добавил умишлено, можеше да ги направи значително по-инкриминиращи.
В борбата да се спазят крайните срокове много от програмистите на Microsoft са поставяли коментари, за които в последствие са съжалили, включително ругатни и саркастични коментари за останалия код или изискванията. Разбира се, всеки съвестен разработчик би добавил подходящ коментар, за да предупреди останалите за по-особените части от кода. Коментари като “грозни ужасни драсканици” говорят за добър код, а не за лош. При лошия код грозните ужасни драсканици са равномерно разпределени навсякъде. Затова ще бъде лицемерно и безсмислено да се преглеждат коментарите с цел да се злепоставят програмистите.
Обидни думи като “fucks” и “shits” има дузина и стотици като “craps”. Има и някои обръщения към идиоти и малоумници, някои към външни хора, някои към тези от Microsoft. Програмистите на Microsoft често правят сериозни предупреждения. Има над 4000 забележки “драсканици”. И макар, че коментарите са учудващо неформални, все пак има граници, които програмистите не прекрачват. Няма пренебрежителни забележки към Microsoft или Windows. Никъде не се споменава Бил Гейтс. Няма расистки обиди.
Програмистите на Microsoft разбират отговорността си да предупредят останалите сериозно. Има над 4000 забележки “драсканици”, повечето от които са предупреждания. Те включват:
privateinetmshtmlsrccorecdbase
aseprop.cxx:
// Драсканици! Драсканици! Драсканици! (MohanB) За да се оправи #64710 на този етап...
privateinetmshtmlsrccorecdutil
genutil.cxx:
// HACK. HACK. HACK. Махнете това когато Марлет дойде...
Относно качеството
Въпреки всичко, качеството на кода е добро. Модулите са малки, а процедурите обикновенно се събират на един екран. Коментарите са много подробни, що се отнася до предназначението на кода, но не се впускат в излишна информация като “добавяме 1 към i”.
Има различни стилове на коментарите - понякога всеки ред на коментарните блокове започва с //, понякога блокът е закоментарен с /* и */. В някои модули функциите имат история, в други нямат. За някои функции променливите са описани в коментарен блок, а за други не са. Очевидно Microsoft не са попаднали в капана на строгото използване на сковани стандарти и универсалното използване на усложнени автоматични инструменти. Изглежда, се доверяват на разработчиците си за доброто документиране, а те наистина го правят.
От коментарите става ясно, че повечето от бъговете се дължат на проблемите по съвместимостта: било съвместимост с предишни версии, хардуерна съвместимост или съвместимост с определен софтуер. Прочутата сила на Microsoft в съвместимостта, както става ясно, е плод както на труда на разработчиците, така и на елегантността (а оттук и стабилността и поддръжката) на кода.
Относно отворения код
Разпространи се слух, че Microsoft използват откраднат отворен код. Този слух бе посрещнат със сериозен скептицизъм. Microsoft имат стотици милиони редове код, повечето от които тясно специализирани. Трудно е да се повярва, че те биха имали полза от използване на друг код и биха поели този риск. Вярно е, че при предишни версии на TCP-IP протокола части бяха легално взети от BSD. Но това беше преди много време, когато Microsoft бяха по-малка компания.
При търсене в коментарите на кода на “linux” и “GPL” не се намират съответствия. За “BSD” има няколко забележки, отнасящи се за BSD-конвенцията за стрингове. Забележките за “GNU” се отнасят до GNUmakefile в privategenxshell, където се споменава “mode for Emacs”. Но това, както изглежда, е легитимно: използването на makefile не означава, че от Microsoft имат права върху получилия се код.
И така, при един повърхностен поглед върху кода не могат да бъдат намерени доказателства, че Microsoft нарушават GPL или са откраднали отворен код.
Прави впечатление, че повечето “драсканици” се отнасят за индивидуални приложения. В някои случаи те дори не са на Microsoft, както в този случай: компилаторът на Borland има бъг, затова разработчиците са го оправили, за да се предпазят от въздействието на този бъг. Но много често поправките са за собствените приложения на Microsoft. Изглежда, има известна йерархия, що се отнася до това: с предимство са бъговете в приложенията на Microsoft, след които са тези на големите софтуерни компании като IBM и Borland.
Накрая би било интересно да се спомене за стария недокументиран код, който разработчиците на приложения на Microsoft използват от много време.
Изглежда, че рисковете за сигурността, произтичащи от този код, са ниски. Microsoft ще трябва да проверят за препълване на буферите на очевидните места. Количеството на мрежовия код е достатъчно малко, за да може да бъде проверен за уязвими места. Освен това този код е на почти 4 години, така че всички очевидни проблеми би трябвало да са оправени досега.
Страховете на Microsoft, че кодът им ще бъде използван от конкуренцията, също изглеждат неоснователни. С код на приложение това би представлявало опасност, но е трудно да си представим основните конкуренти на Мicrosoft, разработващи операциони системи, да се възползват от възможността. Нито Apple, нито Linux могат да откраднат код и да го вградят, дори и ако им беше полезен.
Очевидно Microsoft не са се възползвали от отворения код. Старият им код не е достатъчно добър, но новият код е отличен. Разработчиците са талантливи и ентусиазирани. Проблемите произтичат предимно от баланса между сегашното качество и съвместимостта с голямо разнообразие на хардуер и софтуер, както и съвместимост с предишни версии.