Я думаю, многие уже слышали из новостей про небольшой и забавный скандальчик в мире «больших разработчиков», который (конечно же) не обошелся без участия Microsoft. Один из активных разработчиков Linux Паоло Бонзини обнаружил двухсмысленное выражение в коде гипервизора HyperV, которое как оказалось впоследствии, был включёно в ядро Linux усилиями именно Microsoft. Новую константу 0xB16B00B5
для гостевой ОС Linux можно трактовать как слово «B16 B00B5», то есть как фривольное выражение «BIG BOOBS».
«Кто-то пытается пошутить, я полагаю?», — провокационно накручивает Linux-публику программер Паоло Бонзини.
Вокруг применения этого спорного словосочетания в качестве константы разгорелся острый конфликт, в который вмешались даже воинственные феминистки-разработчики из Red Hat, но, в конце концов, Microsoft принесла свои официальные извинения за этот инцидент:
«Мы благодарим сообщество за информацию по этому вопросу и приносим извинения за оскорбляющую строку. Мы отправили патч, который исправляет эту проблему, изменения вступят в силу со следующей версией ядра», — сказано в комментарии Microsoft.
На самом деле это пикантное недоразумение вызвало у меня достаточно смешанные чувства: во-первых, все эти словечки и трюки уже давно широко известны своим повальным применением, но никаких обид никому это как-то до сих пор не приносило. Во-вторых, ведь и в самом Linux полным полно ещё более странных выражений в качестве названий переменных и особенно в содержании комментариев к коду этой ОС. Да и в Microsoft подобные слова и даже откровенные ругательства, наравне с проклятием всего рода человеческого — не менее обычное дело для её исходных кодов.
Дабы в полной мере зафиксировать этот последний момент, я предлагаю совершить быстрый и стремительный набег на исходные коды ОС Windows. Предлагаю оценить общий стиль комментирования и «облико морале» в документировании кода Microsoft уже на её собственной «операционной» территории, прежде чем обвинять её якобы в «неприличных выходках» в стане её заклятого идеологического врага и конкурента — Linux.
На всякий случай предупреждаю: несмотря на то, что материал базируется на фактах (или том, что принято называть фактами), этот текст носит отчасти шутливый характер — автор статьи сам является активным и благодарным пользователем разных ОС от Microsoft, равно как и свободных ОС также (прежде всего FreeBSD). Поэтому написав этот текст я не преследовал цель кого-то как-то унизить (или напротив — возвеличить), ибо как уже было мною сказано, дела на обсуждаемом сегодня пикантном фронте в этих двух противостоящих лагерях, обстоят более-менее одинаково.
Но прежде чем начать препарацию уже малость задубевшего пациента, позвольте поспешно объяснить, возможно, немного офигевшему читателю, в чьи исходниках мы собственно собрались копаться. Речь идет о широко известной утечке исходного кода ОС Windows 2000 SP1 и NT4 SP6 произошедшей в начале 2004 года. А если говорить ещё точнее — тогда в сеть утекли фрагменты этих двух ОС, впрочем, достаточно большие, чтобы по ним составить своё мнение о специфике комментирования и именования переменных в исходниках этих лидирующих продуктов Microsoft.
И хотя сама MS ещё в те времена сразу опубликовала последнее китайское предупреждение, в котором говорится, что «софтверный гигант вправе инициировать судебное разбирательство против любого, кто попытается найти, загрузить, отправить по почте, опубликовать в интернете или применить в собственных целях исходники её операционных систем», мы рискнули на свой страх и риск заглянуть в этот запретный код буквально только одним глазком, ведомые одним лишь любопытством и при этом подчеркивая, что никаких коммерческих задач при этом не преследуя.
\win2k\private\ntos\ke\
и написан в основном на АСМ-е, и там также есть его версии для i386, alpha, apx64, ia64.Кроме того, позже уже вполне легально и открыто были выложены исходники Windows Research Kernel (WRK), которые содержат исходные коды основной части ядра Windows (NTOS), в кои мы также не преминули заглянуть. Напоследок добавлю, что WRK включает в себя большую часть исходных кодов NTOS ядра из последней выпущенной версии Windows на тот момент — то есть это уже родные каждому Windows XP/Server 2003.
Ну, вот и всё краткое вступление, оглядевшись среди дивного разнообразия исходных файлов, приступим к их ковырянию.
Итак, ругательные слова (например, такие, как «fucks», «shits» и сотни вхождений «craps» и т.д.) в комментариях кода Windows встречаются довольно часто. Не буду засорять статью подобными цитатами непотребств и проклятий из самых недр исходников этой ОС, попеременно взывающих в самый разный адрес. Приведу лишь одно, самое известное и забавное вхождение одного из этих слов, содержащееся в файле из системы дневной пересборки системы:
Цитата из файла: private\windows\media\avi\verinfo.16\verinfo.h: * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * !!!!!!!IF YOU CHANGE TABS TO SPACES, YOU WILL BE KILLED!!!!!!! * !!!!!!!!!!!!!!DOING SO FUCKS THE BUILD PROCESS!!!!!!!!!!!!!!!! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Знаю, я не один противник табуляций, тем более таких провокационно-ассиметричных, но makefile
обычно ломается без всего этого. Там табуляция — по стандарту положена, поэтому проглотим «это» и продолжим.
Кроме проклятий и хитроумной системы сборки, в упомянутых исходниках встречается множество ссылок на неких «идиотов», и даже не побоюсь этого слова — «конченных придурков»: по комментариям понятно, что они чаще всего олицетворяют некие внешние силы по отношению к самой Microsoft, но встречаются и их внутренние разновидности — работающие в параллельных к данной команде разработчиков. Например, послания этого типа могут принимать такую форму (цитирую комментарии из файла private\ntos\rtl\heap.c
, который, судя по его дате, последний раз редактировался аж в далеком 1989 году):
// The specific idiot in this case is Office95, which likes // to free a random pointer when you start Word95 from a desktop // shortcut.
Упоминаний об «идиотах вокруг нас» в исходниках так много, что я могу самозабвенно цитировать эти примеры до бесконечности, но я ограничусь лишь несколькими:
Цитата из файла: private\ntos\w32\ntuser\kernel\swp.c // for idiots like MS-Access 2.0 who SetWindowPos( SWP_BOZO // and blow away themselves on the shell, then lets // just ignore their plea to be removed from the tray
Или:
Цитата из файла: private\shell\ext\ftp\ftpdrop.cpp: // We have to do this only because Exchange is a moron.
Как видим, придурки очень плотным внешним кольцом окружают разработчиков Microsoft, но что хуже, они уже затесались изнутри и в сам dev.team Windows 2000 — приведу ещё парочку примеров этого:
Цитата из файла: private\genx\shell\inc\prsht.w: // we are such morons. Wiz97 underwent a redesign between IE4 and IE5 Цитата из файла: private\shell\shdoc401\unicpp\desktop.cpp: // We are morons. We changed the IDeskTray interface between IE4 Цитата из файла: private\shell\browseui\itbar.cpp: // should be fixed in the apps themselves. Morons!
Разработчики Windows 2000 очень трогательны в своём стремлении предупредить и обезопасить своих коллег по разработке от... собственной дури. Давайте посмотрим, какие удивительно информативные послания, полные боли и душевного страдания за несовершенство нашего мира они оставляют друг другу прямо в комментариях к своему же коду. Я насчитал всего около 4000 различных предупреждений и призывов быть осторожным, ещё совсем немного «БЫТЬ ОЧЕНЬ ОСТОРОЖНЫМ», и пару упоминаний-просьб быть по-возможности хотя бы снисходительным к автору откомментированного кода, и вот лишь некоторые примеры из них.
Цитата из файла: private\inet\mshtml\src\core\cdbase\baseprop.cxx: // HACK! HACK! HACK! (MohanB) In order to fix #64710 at this very late Цитата из файла: private\inet\mshtml\src\core\cdutil\genutil.cxx: // HACK HACK HACK. REMOVE THIS ONCE MARLETT IS AROUND
Marlett конечно опасен, но есть вещи и поинтересней, например повсеместное использование нерукопожатного Goto
внутрях Windows:
Цитата из файла: private\inet\mshtml\src\other\moniker\resprot.cxx: // <HACK> goto EndHack; // </HACK> Цитата из файла: private\inet\mshtml\src\site\layout\flowlyt.cxx: // God, I hate this hack ... Цитата из файла: private\inet\wininet\urlcache\cachecfg.cxx: // Dumb hack for back compat. *sigh* Цитата из файла: private\inet\wininet\urlcache\filemgr.cxx: // ACHTUNG!!! this is a special hack for IBM antivirus software
Если позволит читатель, я не буду цитировать больше ничего из подсистемы inet
, которая, безусловно, является рекордсменом на количество goto-хаков и ругательств в исходниках Windows 2000, я просто приведу фотографию разработчиков этой подсистемы именно для этой версии Windows 2000/IE 7:
Поймите меня правильно: я не имею ничего против Индии, страны, которая демонстрирует уже на протяжении последних восьми лет один из самых быстрых в мире темпов роста зарплат в своей IT-сфере, просто глядя иногда на код, бывает очень полезным иметь возможность посмотреть напрямик в глаза человеку, его писавшего (что само по себе может отмести 80% потенциальных к нему вопросов). В силу этого я приветствую разработки подобно этой (или аналог оной для Windows).
Ну да, прогулявшись по внешним ссылкам, вернемся к другим примерам посланий о хаках в других местах Windows.
Цитата из файла: private\ispu\pkitrust\trustui\acuictl.cpp: // HACK ALERT, believe it or not there is no way to get the height of the current // HACK ON TOP OF HACK ALERT! Цитата из файла: private\ntos\udfs\devctrl.c: // Add the hack-o-ramma to fix formats. Цитата из файла: private\shell\shdoc401\unicpp\sendto.cpp: // Mondo hackitude-o-rama. Цитата из файла: private\ntos\w32\ntcon\server\link.c: // HUGE, HUGE hack-o-rama to get NTSD started on this process!
Хакодром имеет место быть во всех подсистемах Windows, если верить этим комментариям. Но вот выборочные примеры особенно пронзительных предупреждений:
Цитата из файла: private\shell\lib\util.cpp: // TERRIBLE HORRIBLE NO GOOD VERY BAD & UGLY HACK Цитата из файла: private\ntos\w32\ntuser\client\dlgmgr.c: // HACK OF DEATH: no one survives here Цитата из файла: private\ntos\w32\ntuser\client\nt6\user.h: // The magnitude of this hack compares favorably with that of the national USA debt.
Там же замечательный библейский комментарий, который открывает упомянутый файл:
// Abandon all hope, ye who enter here.
А также такое описание к коду ошибки задокументированной там же, надо полагать вполне необходимой для всех Windows-систем:
// Impossible Happened
И текст вывода сообщения рядом гласит:
"Fatal error: Bad Magic"
Так вот откуда берутся известные своей неудобоваримостью ошибки Windows вроде этих:
Интересно, что я не нашел никаких расистских упоминаний в исходниках, упоминаний Билла Гейтса или самой Windows. Правда, порой встречаются весьма странные, я бы даже сказал наркотические комментарии, вот как этот, например:
Цитата из файла: private\shell\ext\tweakui\genthunk.c: // CallProc32W is insane. It's a variadic function that uses // the pascal calling convention. (It probably makes more sense // when you're stoned.)
Окончание статьи надобно читать тута.
1 комментарий
Ссылки не соответствуют тому на что должны указывать.