- Разработчики требуют от Microsoft превратить Windows 7 в СПО
- Популярную ОС – народу
- Требования к Microsoft
- Интерес общественности
- Как отреагирует Microsoft
- Кто создал FSF
- Free Software Foundation призывает Microsoft открыть исходники Windows 7
- Xakep #263. Кредитки в опасности
- Изучаем дерево исходников Windows 10: от телеметрии до open source
- Фильтрация данных из символьных файлов
- Зацепка-фильтр № 1: ищем строки по маске «:\».
- Зацепка-фильтр № 2: предполагаем, что исходные файлы хранятся по аналогии с объектными файлами после сборки, и осуществляем «разборку» объектных файлов в исходные. Внимание! Этот шаг может внести искажение структуры для некоторых папок, потому как достоверно не известны параметры сборки исходников.
- Зацепка-фильтр № 3: удаляем бинарные файлы, поскольку нам интересны только исходные. Удаляем «pdb», «lib», «exp» и т. п. Файлы «res» откатываем до «rc» — исходного кода ресурсного файла.
- Фильтрация данных из исполняемых файлов
- Зацепка-фильтр № 4: проверим, есть ли совпадения между путями до объектных файлов и путями до исходных.
- Зацепка-фильтр № 5: будем считать, что в пределах одной папки хранятся исходные файлы одинакового типа.
- Изучаем полученные данные
- Телеметрия
- Kernel Patch Protection
- Сомнительные файлы
- Open source?
Разработчики требуют от Microsoft превратить Windows 7 в СПО
Разработчики СПО составили петицию к Microsoft с требованием открыть исходный код Windows 7 и сделать ее достоянием общественности. За несколько дней свои подписи под ней оставили свыше 5000 человек.
Популярную ОС – народу
Фонд свободного программного обеспечения (Free Software Foundation, FSF) призвал Microsoft открыть исходный код ОС Windows 7. На своем сайте он разместил петицию, предложив всем, кто хотел бы в дальнейшем получать обновления этой системы и не переходить на Windows 10, подписать ее.
Публикация петиции, получившей название Upcycle Windows 7, напрямую связана с полным прекращением поддержки Windows 7 – с 14 января 2020 г. обычные пользователи больше не могут получить обновления для нее, они доступны лишь корпоративным клиентам Microsoft за отдельную плату. К тому же установка финального обновления, выпущенного Microsoft в день прекращения поддержки, выводила из строя функцию установки обоев на рабочий стол.
Требования к Microsoft
Авторы петиции сформировали три основных требования к Microsoft. Первое и основное заключается в выпуске Windows 7 в виде свободного программного обеспечения. «Ее жизнь не должна прекратиться. Дайте сообществу (разработчиков) возможность изучать, изменять и распространять ее».
FSF потребовал от Microsoft уважать свободу и конфиденциальность пользователей вместо того, чтобы принуждать их переходить на новые версии Windows. В действительности, Microsoft неоднократно использовала различные методы, вынуждающие пользователей обновляться до Windows 10. Как сообщал CNews, один из пользователей подал на компанию в суд за то, что лишился всей информации в результате несанкционированного им апдейта его Windows 7 до Windows 10.
Третье требование Фонда звучит так: «Мы хотим получить дополнительные доказательства того, что вы на самом деле уважаете как самих пользователей, так и их свободу пользователей, и не используете эти понятия для маркетинга, когда вам это удобно».
Интерес общественности
По условиям петиции, она должна собрать 7777 подписей прежде, чем авторы передадут ее Microsoft. Сама петиция была размещена на сайте FSF 23 января 2020 г.
За неполные четыре дня инициативу фонда поддержали свыше 5150 человек. Сроки, в течение которых необходимо собрать нужное количество подписей, инициаторы движения не установили.
Как отреагирует Microsoft
Софтверный гигант пока никак не прокомментировал инициативу Фонда программного обеспечения. Авторы петиции тоже не гарантируют, что сбор необходимого числа подписей возымеет действие, но, по их словам, Microsoft неоднократно раскрывала исходный код своих разработок.
Так, на 27 января 2020 г. в профиле самой Microsoft на ресурсе GitHub, принадлежащем ей с 2018 г. можно найти исходный код стандартного калькулятора Windows. Помимо этого, в марте 2014 г., как сообщал CNews, компания передала исходные коды двух ранних версий операционной системы MS-DOS (MS-DOS 1.1 1982 г. и MS-DOS 2.0 1983 г.) и первой версии Word for Windows Калифорнийскому музею компьютерной истории. Исходники легендарной ОС и текстового процессора можно было безвозмездно загрузить с сайта музея.
В октябре 2010 г. Microsoft повторно сообщила об открытии исходных кодов MS-DOS. На этот раз в сообщении упоминались версии 1.25 и 2.0, код которых корпорация разместила на GitHub.
В итоге, Microsoft впервые раскрыла исходный код MS-DOS версии 1.1 спустя 32 года с момента выхода самой ОС. Windows 7 вышла 22 октября 2009 г., 10 лет назад. К тому же, некоторые клиенты Microsoft готовы платить крупные суммы за обновления для этой системы возможность отсрочить переход на Windows 10.
В октябре 2019 г. Microsoft заявила, что корпоративные клиенты (представители сегмента SMB наравне с крупным бизнесом) получат возможность обновлять Windows 7 и дальше. В рамках сервиса Extended Security Update (ESU), они смогут поддерживать свою Windows 7 в актуальном состоянии до января 2023 г. Подписка на сервис продается с 1 декабря 2019 г. и в 2020 г. стоит $25 для каждого компьютера в отдельности. В 2021 г. пишет The Verge, цена вырастет до $50, а в 2021 г. – до $100. К примеру, правительству Германии «корпоративная» поддержка Windows 7 обойдется приблизительно в $887 тыс.
Microsoft активизировала свою работу в рамках стратегического сотрудничества с СПО-сообществом в апреле 2010 г., когда на пост директора по стратегии взаимодействия с Linux и открытым ПО был назначен Джеймс Уцшнайдер (James Utzschneider). В его планы входило установление эффективной обратной связи с представителями СПО сообщества для дальнейшей интеграции их продуктов с решениями Microsoft.
Спустя год, в июле 2011 г., Microsoft стала одним из основных контрибьюторов Linux 3.0, а один из ее сотрудников К.И. Шринивасан (K.Y. Srinivasan) внес в ядро более 300 изменений, оказавшись третьим в списке программистов по этому параметру. В целом на тот момент Microsoft внесла 361 изменение в ядро Linux, таким образом попав на седьмое место в списке компаний, предоставляющих код для него. Для сравнения, 1085 изменений внесли независимые разработчики, 1000 предоставила Red Hat, а за Intel числились 839 изменений.
Кто создал FSF
Фонд свободного программного обеспечения был основан в 1985 г. Ричардом Столлманом (Richard Stallman), который также был приглашенным лектором в Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института. Также Столлман заложил основы операционной системы GNU/Linux
С поста президента Фонда Столлман ушел в сентябре 2019 г., попутно завершив карьеру в MIT. Это решение он принял на фоне травли, вызванной его высказываниями относительно секса с несовершеннолетними.
«Я безотлагательно ухожу в отставку со своей должности в MIT и покидаю Фонд СПО по причине давления на меня на фоне недопонимания и неверных характеристик», – сказал Столлман.
Free Software Foundation призывает Microsoft открыть исходники Windows 7
Xakep #263. Кредитки в опасности
14 января 2020 года была прекращена поддержка операционной системы Windows 7. Впредь обновления смогут получать лишь корпоративные клиенты, имеющие так называемую расширенную поддержку (Extended Security Updates, ESU). Расширенная поддержка – это платная услуга Microsoft, с помощью которой корпорация продолжит поставлять обновления безопасности компаниям и предприятиям, использующим Windows 7, вплоть до 2023 года. Стоимость такой поддержки составляет от 25 до 200 долларов за одну рабочую станцию, в зависимости от версии ОС (Enterprise или Pro), а также времени, на протяжении которого компании требуются обновления.
В связи с прекращением поддержки Windows 7 Фонд свободного программного обеспечения (Free Software Foundation, FSF) опубликовал на своем сайте петицию, в которой Microsoft призывают сделать Windows 7 свободным ПО и открыть исходные коды ОС.
Представители FSF отмечают, что с окончанием поддержки ОС настал конец многолетнему вторжению в личную жизнь и угрозе безопасности пользователей, а у Microsoft теперь есть прекрасный шанс исправить прошлые ошибки. Фонд предлагает компании отдать Windows 7 сообществу для дальнейшего изучения и улучшения, напоминая, что прецеденты выпуска некоторых основных утилит Windows в качестве свободного ПО уже были (в частности, были открыты исходные коды «Калькулятора»).
Заявление FSF гласит:
- Мы требуем, чтобы Windows 7 была выпущена как свободное программное обеспечение. Ее жизненный цикл не должен заканчиваться. Позвольте сообществу изучать, изменять и делиться.
- Мы призываем вас уважать свободу и конфиденциальность ваших пользователей, а не просто подталкивать их к переходу на новейшую версию Windows.
- Предоставьте нам больше доказательств того, что вы действительно уважаете пользователей и их свободу, а не просто используете эти концепции в маркетинге, когда вам это удобно.
Изучаем дерево исходников Windows 10: от телеметрии до open source
Насколько бы закрытым ни было программное обеспечение Microsoft, информации о своем внутреннем устройстве оно выдает предостаточно. К примеру, экспорт функций из библиотеки по именам дает представление о ее интерфейсах. В свободном доступе есть и отладочные символы, которые повсеместно используются для диагностики ошибок в ОС. Однако на руках у нас все равно имеются только скомпилированные бинарные модули. Становится интересно: а какими они были до компиляции? Давайте попробуем разобраться, как вытащить побольше информации об исходных кодах, не делая ничего незаконного.
Идея, конечно, не нова. В свое время подобное делали и Марк Руссинович, и Алекс Ионеску. Мне лишь было интересно получить свежие данные, немного дополнив и уточнив уже проделанную другими работу. Для эксперимента нам понадобятся пакеты отладочных символов, которые есть в свободном доступе. Я взял пакеты для последней релизной версии «десятки» (64 бита), причем решил исследовать и релизный пакет (free build), и отладочный (checked build).
Отладочные символы — это набор файлов с расширением pdb (program database, база данных программы), в которых хранится различная информация для расширения возможностей отладки бинарных модулей в ОС, включая имена глобалов, функций и структур данных, иногда вместе с их содержимым.
Помимо символов можно взять условно доступную отладочную сборку «десятки». Такая сборка богата на ассерты, в которых бывают описаны не только недокументированые и отсуствующие в символьных файлах имена переменных, но и номер строки в файле, в котором сработал ассерт.
В примере видно не только имя файла и его расширение, но и структура каталогов до него, очень полезная даже без корня.
Натравливаем на файлы символов утилиту strings от sysinternals и получаем около 13 ГБ сырых данных. А вот кормить все файлы из дистрибутива отладочной сборки подряд — так себе идея, ненужных данных будет слишком много. Ограничимся набором расширений: exe — исполняемые файлы, sys — драйвера, dll — билиотеки, ocx — ActiveX-компоненты, cpl — компоненты панели управления, efi — EFI-приложения, в частности загрузчик. Сырых данных от дистрибутива набралось 5,3 ГБ.
К своему удивлению я обнаружил, что не так много программ способны хотя бы открыть файлы размером в десяток гигабайт, и уж тем более единицы смогли поддержать функцию поиска внутри таких файлов. В данном эксперименте для ручного просмотра сырых и промежуточных данных использовался 010 Editor. Фильтрация данных дешево и сердито осуществлялась скриптами на питоне.
Фильтрация данных из символьных файлов
В символьных файлах помимо прочего содержится информация компоновщика. То есть, в символьном файле присутствует список объектных файлов, которые использовались для компоновки соответствующего бинарника, причем в компоновщике используется полный путь до объектного файла.
- Зацепка-фильтр № 1: ищем строки по маске «:\\».
Получаем абсолютные пути, сортируем, удаляем дубликаты. К слову, мусора получилось не так много, и он был удален вручную.
При осмотре полученных данных стала понятна примерная структура дерева исходных кодов. Корень — «d:\th», что по всей видимости означает threshold, в соответствии с названием ноябрьской версии Windows 10 — Threshold 1. Однако файлов с корнем «d:\th» оказалось мало. Это объясняется тем, что компоновщик принимает уже собранные файлы. А сборка объектников осуществляется в папки «d:\th.obj.amd64fre» для релизной сборки и «d:\th.obj.amd64chk» для отладочной.
- Зацепка-фильтр № 2: предполагаем, что исходные файлы хранятся по аналогии с объектными файлами после сборки, и осуществляем «разборку» объектных файлов в исходные. Внимание! Этот шаг может внести искажение структуры для некоторых папок, потому как достоверно не известны параметры сборки исходников.
Для примера:
d:\th.obj.amd64fre\shell\osshell\games\freecell\objfre\amd64\freecellgame.obj
это бывший
d:\th\shell\osshell\games\freecell\freecellgame.c??
По поводу расширения файлов: объектный файл получается из кучи разных типов исходного файла: «c», «cpp», «cxx», «asm» и т. д. На данном этапе неясно, какой именно тип исходного файла использовался, поэтому оставим расширение «c??».
Помимо папки «d:\th» наблюдается множество других корней. Например, «d:\th.public.chk» и «d:\th.public.fre». Данную папку мы опустим ввиду того, что в ней хранится публичная часть sdk, то есть она нам не очень интересна. Также стоит отметить различные пути проектов для драйверов, которые, судя по всему, собираются где-то на рабочих местах разработчиков:
c:\users\joseph-liu\desktop\sources\rtl819xp_src\common\objfre_win7_amd64\amd64\eeprom.obj
C:\ALLPROJECTS\SW_MODEM\pcm\amd64\pcm.lib
C:\Palau\palau_10.4.292.0\sw\host\drivers\becndis\inbox\WS10\sandbox\Debug\x64\eth_tx.obj
C:\Users\avarde\Desktop\inbox\working\Contents\Sources\wl\sys\amd64\bcmwl63a\bcmwl63a\x64\Windows8Debug\nicpci.obj
Другими словами, существует набор драйверов устройств, отвечающих стандартам, например, USB XHCI, которые входят в дерево исходных кодов ОС. А все специфичные драйвера собираются где-то в другом месте.
- Зацепка-фильтр № 3: удаляем бинарные файлы, поскольку нам интересны только исходные. Удаляем «pdb», «lib», «exp» и т. п. Файлы «res» откатываем до «rc» — исходного кода ресурсного файла.
Выходные данные становятся все красивее! Однако на этом этапе дополнительные данные получить уже практически невозможно. Переходим к следующему набору сырых данных.
Фильтрация данных из исполняемых файлов
Поскольку абсолютных путей в сырых данных оказалось мало, фильтровать строки будем по расширениям:
- «c» — исходные файы на языке C,
- «cpp» — исходные файлы на языке C++,
- «cxx» — исходные файлы на C или C++,
- «h» — заголовочные файлы на языке C,
- «hpp» — заголовочные файлы на языке C++,
- «hxx» — заголовочные файлы на C или C++,
- «asm» — исходные файлы на MASM,
- «inc» — заголовочные файлы на MASM,
- «def» — описательный файл для библиотек
После фильтрации данных становится видно, что хотя у полученный путей и нет корня, структура каталогов говорит о том, что она строится относительно него. То есть, всем путям достаточно добавить в начале корень «d:\th».
На этом этапе есть несколько проблем с данными, полученными из символов. Первая проблема: мы не уверены, что правильно откатили путь сборки исходного файла в объектный файл.
- Зацепка-фильтр № 4: проверим, есть ли совпадения между путями до объектных файлов и путями до исходных.
И они действительно есть! То есть, для большинства каталогов можно утверждать, что их структура восстановлена правильно. Конечно, все еще остаются сомнительные каталоги, но думаю, эта погрешность вполне приемлема. Попутно можно смело заменять расширение «c??» на расширение совпавшего по пути исходника.
Вторая проблема — заголовочные файлы. Дело в том, что это важная часть исходных файлов, однако из заголовочника не получается объектный файл, а это значит, что из информации об объектных файлах нельзя восстановить заголовочники. Приходится довольствоваться малым, а именно теми заголовочниками, которые мы нашли в сырых данных бинарных файлов.
Третья проблема: мы все еще не знаем большинство расширений исходных файлов.
- Зацепка-фильтр № 5: будем считать, что в пределах одной папки хранятся исходные файлы одинакового типа.
Ну а как же исходники на ассемблере? За последним штрихом можно обратиться к Windows Research Kernel — исходным кодам Windows XP — и часть исходников на ассемблере переименовать вручную.
Изучаем полученные данные
Телеметрия
Какое-то время я изучал вопрос об устройстве телеметрии в Windows 10. К сожалению, анализ на скорую руку не выявил ничего стоящего. Я не нашел никаких кейлоггеров, никакой утечки чувствительных данных, ничего, к чему можно было бы прикопаться. И первым ключевым словом для поиска среди исходных файлов было «telemetry». Результат превзошел мои ожидания: 424 совпадения. Самые интересные приведу ниже.
Комментировать, пожалуй, не стоит, поскольку все равно достоверно ничего не известно. Однако эти данные могут послужить хорошей отправной точкой для более детального исследования.
Kernel Patch Protection
Следующая находка — всеми любимый PatchGuard. Правда, в дереве исходников ОС присутствует только один файл непонятного, скорее всего бинарного типа.
d:\th\minkernel\ntos\ke\patchgd.wmp
Поискав совпадения в нефильтрованных данных, я обнаружил, что на самом деле Kernel Patch Protection — это отдельный проект.
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen00.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen01.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen02.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen03.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen04.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen05.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen06.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen07.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen08.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp\xcptgen09.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgd.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda2.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda3.c??
d:\bnb_kpg\minkernel\oem\src\kernel\patchgd\mp_noltcg\patchgda4.c??
Сомнительные файлы
Не придумав больше ничего меня интересующего, я начал искать все подряд — и остался доволен!
d:\th\windows\core\ntgdi\fondrv\otfd\atmdrvr\umlib\backdoor.c??
в драйвере шрифтов?
d:\th\inetcore\edgehtml\src\site\webaudio\opensource\wtf\wtfvector.h
Web Template Framework, это всего лишь Web Template Framework, спорная аббревиатура. Погодите,
Open source?
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\libjpeg\jaricom.c??
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\libpng\png.c??
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\libtiff\tif_compress.c??
d:\th\printscan\print\drivers\renderfilters\msxpsfilters\util\opensource\zlib\deflate.c??
Думаю, на этой находке пора закругляться.
Архив с текстовым файлом со списком исходников приведен по ссылке. Делитесь своими находками в комментариях!