Microsoft открывает исходный код первых версий MS-DOS и Word

    image

    Не прошло и 40 лет, как компания Microsoft решила открыть для публики исходный код MS-DOS v1.1 и v2.0, а также одной из первых версий Word for Windows 1.1a. Сказать спасибо за это надо The Computer History Museum и Microsoft Research.

    Ссылки:
    MS-DOS v1.1 & v2.0
    Word v1.1a

    Зеркало [mega]
    Зеркало [sendspace]

    Согласно пресс-релизу, оба программных продукта стали краеугольным камнем в жизни компании, заложив основу ее коммерческого успеха. Исходный код MS-DOS v1.1 относится к 1982 году, v2.0 — к 1983. Кстати, в версии 1.1 вся операционная система умещалась в 12 килобайтах памяти — что, конечно, несравнимо с сегодняшними «монстрами».

    Версия Word для DOS, выпущенная в 1983 году, особого успеха не снискала, проиграв лидеру рынка на тот момент — процессору по имени WordPerfect. Зато выпуск в 1989 году Word для Windows изменил все — за четыре года этот программный продукт сумел захватить более половины доходов всего рынка текстовых процессоров, что стало впечатляющим успехом работы маркетингового отдела и инженеров компании.

    Что ж, сегодня вечером нас всех ждал сюрприз — теперь к легенде сможет прикоснуться каждый.

    P.S. Тем временем, пользователи на HackerNews уже делают первые открытия в исходном коде Word, проверяя годами ходившие предания:

     $ grep -ri fuck .
        ./Opus/asm/wordgrep.asm:; BP  is used as always, the other registers are free to fuck with.
        ./Opus/asm/wordgrep.asm:	je	another_fucking_out_of_range_jump
        ./Opus/asm/wordgrep.asm:another_fucking_out_of_range_jump:
    

    ./Opus/asm/formatn.asm in Word v1.1a:
        ; /* Following comment is preserved verbatim for eternity */
        ; /* Rounding becomes a non-existant issue due to brilliant re-thinking */
        ; /* "What a piece of work is man
        ;	How noble in reason
        ;	In form and movement,
        ;	how abject and admirable..."
    
        ;		 Bill "Shake" Spear [describing Sand Word] */
    

    Источник
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 109
    • +26
      Хорошие новости. Лет через 30 откроют Windows 8
      • +4
        Они за 40 лет пофиксили все костыли и баги, теперь только стало не стыдно показать.
      • +43
        Астрологи предсказывают год форков доса и ворда.
        • +151
          MS-DOS в 30 строк
          MS-DOS, переписанный на JS
          MS-DOS на чистом CSS3
          Word для Windows на HTML 5 (без тэга <brainfuck> точно не обойтись!)
          Нативный DOOM, запущенный на нативной MS-DOS на PEBBLE
        • –5
          «Скандалы, интриги и расследования!»
          • +7
            Форков не будет. Лицензия несвободная.
          • +10
            Скоро портируют на ардуину.
          • +15
            Вижу в Word некоторое количество *.c файлов. Забавно было-бы натравить на них PVS-Studio. Правда, боюсь возникнут проблемы с Си тех времён. Но самый большой вопрос, как бы получить *.i файлы. Кто ни будь знает, как и чем они собирались?
            • +36
              Тупо переименовал *.c в *.i и натравил PVS-Studio Standalone. И вот прям сразу зависание/падение:
              void GetNameElk(elk, stOut)
              ELK elk;
              unsigned char *stOut;
              {
              	unsigned char *stElk = &rgchElkNames[mpelkichName[elk]];
              	unsigned cch = stElk[0] + 1;
              
              	while (--cch >= 0)
              		*stOut++ = *stElk++;
              }
              


              while (--cch >= 0) — никогда не остановится. Переменная типа unsigned всегда >= 0.
              В общем надо будет на досуге повнимательней археологией заняться.
              • –3
                Я все-таки думаю что нулем оно быть может.
                • 0
                  Цикл while выполняется, пока выполняется условие. Условие: X >= 0.
                  Если X это unsigned, то при любом значении X, условие выполняется.
                • 0
                  del
              • +5
                Вполне вероятно что оно и не должно было останавливаться. Выход из кода (и возврат обратно) через прерывания какие-нибудь.

                А это — просто «процесс» перекладывания из одного буфера в другой.
                • –2
                  Я вообще не знаю C и есть вероятность что могу ошибаться, но разве значение переменной cch не уменьшается с каждой итерацией? Ведь там указано --cch >= 0, а не просто cch >= 0.
                  • +6
                    Уменьшается. Но переменная объявлена как unsigned, и меньше нуля она стать не может.
                    • +3
                      Спасибо за объяснение. Почему-то не сразу понял что Andrey2008 имел ввиду.
                  • +2
                    Возможно, что выражение "--cch" имело тип int. И тогда сравнивался бы -1, а в cch лежало бы 255.
                    • +1
                      Натравливать PVS-Studio на сорцы первого доса…
                      Ну это как профессору МГУ проверять правописание первоклашки и придираться.
                      Во-первых профессор когда-то сам был первоклассником и тоже писал «карова».
                      Во-вторых, аппаратный уровень того времени не позволял сделать качественный статический анализатор (сколько тогда оперативки было?).
                      В-третьих, для того чтобы запустить анализатор — нужна была сама операционная система и компилятор чтобы этот анализатор создать.
                      Надо же было с чего-то начать? Вот и начали с операционки, потом перешли к компилятору, потом пришло время анализатора.
                      Если есть хоть какая-то операционка, хоть какой-то компилятор, хоть какой-то дебаггер — то следующий «виток технологий» уже проще.
                      • +7
                        Я не думаю, что всё так плохо. Мне кается, что там очень всё даже хорошо. Да, инструменты были проще и слабее. Но и программы были намного короче. Тогда было намного легче и реальней сделать обзор кода. Вполне было реально взять и почитать код всего проекта.
                        А проверить захотелось исключительно из любопытства.
                        • +1
                          Ну, не надо про аппаратный уровень. Дебаггеры на мейнфреймах были уже в шестидесятых — кто мешал написать на тех же мейнфреймах эмулятор с отладчиком?
                          • +1
                            Видимо, вы забыли, что DOS был написан по сути дела программистом-одиночкой (вики говорит о Тиме Патерсоне и компании " Seattle Computer Products"), да и Майкрософт тех времён состоял чуть ли не из одного Гейтса. Мейнфреймы 60-ых — это вообще песня. Там тоже до мегабайтов и гигабайтов оперативки было далеко. Не говоря уже о стоимости доступа. Стоимость разработки полноценного эмулятора и отладчика для первой операционки нового компьютера на порядки превышала возможные проблемы. Помните — не надо заниматься преждевременной оптимизацией. Особенно, если может не взлететь.
                          • +1
                            PVS-Studio не делает ничего, что не мог бы сделать человек. По сути осуществляет ревьюирование кода без риска «замыленного глаза»
                        • +26
                          Сурово, однако, раньше жилось:

                          Assert((1 > 0) == 1);
                          

                          Могло быть не так?
                          • +6
                            Может какие-то макросы?

                            #define 1 rand()
                            или еще что.
                            • +2
                              скорее всего хотели вызвать исключение при отладке или типа того
                              • +26
                                А может имелось в виду, что true — это именно 1, а не 2 или там 0xFFFF? Потому что дальше идут какие-то хаки вроде error_message_array[some_value > some_limit].

                                Стандарта на язык не было, так что компиляторы, возможно, имели право представлять логическую истину как попало при преобразовании в int. Понятия не имею, как там с этим дело было, но в таком ключе эта проверка хоть немного логична.
                                • +3
                                  Хотя нет, The C Programming Language, 2.6 Relational and Logical Operators:
                                  By definition, the numeric value of a relational or logical expression is 1 if the relation is true, and 0 if the relation is false.
                                  Так что если считать K&R стандартом, то по идее такого быть не должно. Но опять же, стандартом она была лишь де-факто, так что вполне вероятно, что этот ассерт — проверка на адекватность компилятора.
                                • +3
                                  Как вариант — проверка на отсутствие #define true false-подобных макросов.
                                  • 0
                                    Я где-то читал, про разработку какого-то продукта в MS при помощи альфаверсии компилятора — может чтобы выгребать какие-то альфаглюки?
                                    • +1
                                      Как вариант могло быть -1. Не помню было ли в каком-нибудь Си такое, но во многих языках такое было.
                                  • +10
                                    Спасибо! Как раз искал что почитать.
                                    • +30
                                      P.S. Тем временем, пользователи на HackerNews уже делают первые открытия в исходном коде Word, проверяя годами ходившие предания:

                                      grep -ri fuck .

                                      Спустя 30 лет справедливость таки восстановлена: мощи доса отданы на растерзание GNU/grep
                                      • +21
                                        Исходники dos 6 доступны давным давно, правда не очень лицензионные. И там встречается, например:
                                        * Function will add the szSetupPath to the users path statement in the
                                        * autoexec.bat file. The szSetupPath will be the first location in the
                                        * path statement. The path can be in about a million fucked up forms
                                        * depending on the level of stupidity in the user
                                      • +2
                                        Актуально.
                                        • +2
                                          Бросил все дела, сижу, читаю комментарии к коду ворда. Открываю случайный исходник и начинаю листать. Можно фильмы снимать по этому. Хоть комедии, хоть трагедии.
                                          /* Special handling for ParaNormal [...]
                                          /* just in case… */
                                          /* windows bug work around */

                                          И вообще, разработчиками были, видимо, люди очень эмоциональные и ранимые.
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                            • +1
                                              Полагаю ParaNormal это встроенный стиль абзаца Обычный.
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                              • +79
                                                Иди отсюда.
                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                  • +86
                                                    Благородный дон, не соблаговолите ли Вы покинуть тред?
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                      • +3
                                                        Вы случайно не из питера?
                                                        • +5
                                                          Судя по обращению, из Арканарского королевства.
                                              • +1
                                                Это ж хорошо (хотя, я, честно говоря, больше ждал CDC NOS). А Тот Самый Бейсик вместе с эмулятором не собираются открывать? Или они безвозвратно утеряны?
                                                • +1
                                                  Ответ на этот вопрос зависит от ответа на другой вопрос: собственно, с чего вдруг Microsoft расщедрилась и отдала Computer History Museum исходники для публикации? Последнего никто не знает. Я подозреваю, что все где-то наверняка лежит до сих пор в неизменном виде и покрывается пылью, просто публиковать не хотят. Прямо, конечно, в Microsoft ничего не говорят, но ребята из Computer History Museum продолжают «отжимать» у компаний разные исходники — вполне возможно, что все еще будет.
                                                  • +1
                                                    просто публиковать не хотят
                                                    — Почему? Коммерческого интереса оно уже давно не представляет. Манхэттенский Проект — и то рассекретили быстрее.
                                                    • +5
                                                      Публикация кода несёт юридические риски. Например, если выяснится, что код откуда-нибудь цельно тянут. Или как-то еще нарушает патенты или лицензии.
                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                        • –6
                                                          Какие риски у публикации наколеночной поделки трех школьников?
                                                        • 0
                                                          А возможно такое, что какие-то части кода до сих пор используются в их продуктах? Конечно маловероятно что в 2010 или более поздних вордах мы увидим куски первых — но все же… А это уже потенциальные косяки безопасности
                                                          • 0
                                                            А может все еще проще — открытые коды показывают все «грязное белье» программистов. Одно дело кричать, что мелкософт глючит, другое показать им сотни ляпов, костылей и недочетов кода в их же исходниках. Это может быть сильным ударом по репутации и «профессионализму их профессионалов», хоть и прошлого.
                                                            • +4
                                                              Это никак не повлияло бы на их сегодняшнюю репутацию.

                                                              Во первых тех программистов, что писали этот древний код, многих уже нет в компании, во вторых даже те, кто осталось — прошли через 30 лет опыта, что очень сильно меняет программиста.
                                                              Ну и на последок — некорректно судить о качестве кода 30 летней давности используя современные метрики. 30 лет назад индустрия только еще зарождалась. Это сейчас у нас есть разные парадигмы, паттерны, общепринятые методики, итп. Тогда многого из этого еще не было и каждый велосипедил как умел.

                                                              • +7
                                                                Да, вы правы. 30 лет в этой индустрии — это не просто «прошлое», это «средние века» по нашему. А тогда и женщин не стеснялись на кострах жечь…
                                                    • –27
                                                      Зачем? Чисто на поржать? Так не смешно уже. Лучше бы код вынь-98 и шестого осла открыли. Вот там жертв было бы больше. На порядки.
                                                      • +6
                                                        На самом деле (с) Вордом для DOS в нашей стране достаточно активно пользовались. Я, правда, про первую версию не в курсе, а вот кажется пятая была очень даже популярна, особенно когда появились первые лазерные принтеры — это смотрелось чудом — полиграфия лучше книжной. А вот как раз ВордПёрфектом пользовались только представительства зарубежных компаний. Я однажды видел этот продукт и был удивлен, что он завоевал популярность — чистый экран 80х25, на нем курсор и все действия через клавиатурные шорткаты. На мой тогдашний взгляд это даже хуже Лексикона было. Эх… Еще и ChiWriter… Где мои 17 лет?
                                                        • +4
                                                          ChiWriter, OMG, как обухом внезапно!11…
                                                          • +1
                                                            WordPerfect умел такую вещь, как поддержка шаблонов с полями, заполняемыми вызывающей WP программой. Причем, умел это чуть ли не с конца 80-х. А еще — WP был мультиплатформенным, что в конце 80-х — начале 90-х было очень и очень актуально.
                                                            Я сам в начале 00-х в одной маленькой московской фирме с богатой историей, тянущейся из СССР, имел дело с системой формирования и печати документов и счетов, построенной на IBM RS/6000 в качестве сервера БД (которая там была вовсе даже нереляционная), терминальной сети, построенной на COM-портах и на соответствующих концентраторах Digi, и WordPerfect на компьютерах пользователей. Оно работало, и работало быстро и надёжно. Но поддерживать это было крайне тяжело, а потому мы это всё заменили в итоге на MS SQL Server + Ethernet + MS Word, а терминальная часть интерфейса была реализована на win32.
                                                            • +2
                                                              Вы просто смотрите на всё историю без понимания контекста. Вначале были TeX и roff/nroff, где форматирование задавалось путём указания конманд. WordPerfect явился тогда, когда к этой деятельности подключились люди, которым было сложно увидеть за мешаниной всех этих команд будущий документ: с одной стороны он показывает «чистый» текст документа, а с другой стороны режим reveal codes давал возможность работать с текстом так, как люди за десятилетия привыкли — в текстовом виде и с полным контролем над результатом.

                                                              Word (и Лексикон с ChiWriter'ом) — это уже следующий этап в движении от «тупой» к «ещё тупее»: тут уже ни о каких reveal codes никто в принципе не думал, это для людей, которые выравнивают текст с помощью «самой большой кнопки», а на следующую страницу переходят с помощью «большой кнопки со стрелочкой». Там ещё есть кой-какие возможности для людей, которые хотят контролировать результат, но они уже — не главное, главное — чтобы человек находящийся где-то между «идиот» и «безнадёжный кретин» хоть что-то смог бы изобразить.
                                                              • +1
                                                                О, да :) Я в ChiWriter училась печатать. Тренировалась на диссертации отца — перепечатывала с черновиков, с формулами и всеми делами.
                                                                Весёлые были времена :)
                                                              • +12
                                                                Вдруг кому удобней будет, залил на гитхаб github.com/zxcabs/MSDOS_MSWORD
                                                              • +2
                                                                Хочу исходники Слово и Дело. Скомпилировать без счётчика запусков — осуществить детскую мечту.
                                                                • +14
                                                                  У кого-то чёрный пояс по хитрозакрученным условиям:
                                                                  				if ((fCloseDoc = (doc = DocFromSt(stFileName)) == 
                                                                  						docNil) && (doc = DocOpenStDof(stFileName, 
                                                                  						dofNoWindow, NULL)) == docNil)
                                                                  

                                                                  И коричневый пояс по пустым циклам:
                                                                  for (ifoo = 1; ifoo < ifooMac; ifoo++);
                                                                  		{
                                                                  		if (*pvoteFoo == 0)
                                                                  			goto LRet;
                                                                  		if (*pvoteFoo > voteMaj)
                                                                  			{
                                                                  			fooMaj = *pfoo;
                                                                  			voteMaj = *pvoteFoo;
                                                                  			}
                                                                  		*pfoo++;
                                                                  		*pvoteFoo++;
                                                                  		}
                                                                  


                                                                  Где-то четверть кода написана на ассемблере, остальное — чистый си, в общем даже достаточно аккуратный си. Ждём поста про то как PVS-Studio чихвостит Microsoft:)
                                                                • +4
                                                                  Эксгумация…
                                                                  • 0
                                                                    Сейчас хабровчане в коде первого DOS-а точно найдут «Главный вопрос о жизни вселенной и всего такого.» ©
                                                                    • +1
                                                                      Ответ на него точно есть.

                                                                      MSCODE.ASM:
                                                                      short_addr $LSEEK ; 66 42
                                                                      short_addr $GET_DATE ; 42 2A

                                                                      DOSSYM.ASM:
                                                                      GET_DATE EQU 42 ; 42 2A
                                                                      LSEEK EQU 66 ; 66 42

                                                                      SYSCALL.ASM:
                                                                      SUBTTL DATE AND TIME - SYSTEM CALLS 42,43,44,45; S/G DATE,TIME
                                                                      procedure $GET_DATE,NEAR ;System call 42

                                                                      MSDOS.ASM:
                                                                      GETDATE: ;Function call 42
                                                                      • +1
                                                                        Вот это точно ОНО! GETDATE: ;Function call 42
                                                                    • +10
                                                                      msdos\v20source\COMMAND.ASM:
                                                                      Get_mem: MOV BX,0FFFFH ; allocate all of memory

                                                                      «64 Кб хватит всем...»
                                                                      • +2
                                                                        640кб
                                                                      • +5
                                                                        Когда то и Билли вела дорога приключений, а потом ему прострелили колено…
                                                                      • +13
                                                                        Сложно удержаться и не выложить тут вот это:

                                                                        DOS

                                                                        И представил я:
                                                                        Город наводнился вдруг разумными людьми:
                                                                        Вышли все под DOS,
                                                                        А проклятый WINDOWS — удаляли, черт возьми.
                                                                        Позабыв про WORD,
                                                                        MS EXCEL, COREL DRAW и прочий геморрой,
                                                                        Люди ставят DOS,
                                                                        Словно в Рай заходят в DOS,
                                                                        Нормальный, чистый DOS…

                                                                        (С) Леонид Каганов

                                                                        С нетерпением жду Excel исходников. Очень уж хочется на них взглянуть.
                                                                        • +4
                                                                          А я жду исходников Microsoft Visual Studio или хотя-бы компилятора msvc.
                                                                          • +1
                                                                            >DOS

                                                                            На случай если кто не знаком с этим произведением (или просто давно не слышал) — наслаждайтесь «клипом» :)

                                                                            • 0
                                                                              Нужны годы, чтобы эта песня прекратила всплывать в сознании и мешать думать о чем-то еще. И достаточно одного прослушивания, чтобы свести эти годы на нет.

                                                                              Кстати, с ней же всплывает в памяти и «Ставил Windows программист».
                                                                          • +1
                                                                            Препарация динозавров.
                                                                            Палеонтологи есть?
                                                                            • +1
                                                                              Палеонтологи есть?

                                                                              Думаю все, кто отписался в этой теме, уже провели раскопки.
                                                                              • +1
                                                                                Тут и палеонтологи есть, и патологоанатомы, и даже несколько некрофилов затесалось… :)
                                                                              • –1
                                                                                Печально, что нет исходников ассемблера.
                                                                              • 0
                                                                                Я, конечно, не сильно знаком с ASM, но чтобы кто мне объяснит логику данного выражения?

                                                                                FOURYEARS = 3*365 + 366
                                                                                • +3
                                                                                  #define FOURYEARS 1461.
                                                                                  (Три обычных и один високосный год).
                                                                                  • +1
                                                                                    Да это же юлианский календарь!
                                                                                    • +3
                                                                                      Разница между юлианским и григорианским календарем между 1901 и 2100 годами постоянна.
                                                                                  • 0
                                                                                    Даже начинаю жалеть, что толком не застал компьютеры тех времен :)
                                                                                    • –2
                                                                                      ооо, наконец-то! Поле для нового BolgenOS
                                                                                      • 0
                                                                                        Может музей кода создать?
                                                                                        • 0
                                                                                          А это он и есть.
                                                                                          • +4
                                                                                            Не совсем. Нужны не только исторические экспонаты, но и разделы «Абстракционизм», «Супрематизм», «Эпоха возрождения» и т. д.
                                                                                            • +1
                                                                                              Извините, не понял вашего тонкого юмора.
                                                                                            • +1
                                                                                              Думаю, самыми большими разделами будут «Экспрессионизм», «Сюрреализм» и «Культура народов Юго-Восточной Азии»…
                                                                                      • +1
                                                                                        Так, для справки — количество строк кода (с комментариями, пустыми строками).
                                                                                        Для MS-DOS:
                                                                                        [yse@yse msdos]$ cat `find ./ -iname "*.c" -or -iname "*.asm"`  | wc -l
                                                                                        65266
                                                                                        

                                                                                        Для Word:
                                                                                        [yse@yse Word 1.1a CHM Distribution]$ cat `find ./ -iname "*.c" -or -iname "*.asm"`  | wc -l
                                                                                        423318
                                                                                        


                                                                                        Есть где-нибудь информация о прибыли от этих продуктов? А то можно посчитать, сколько стоит одна строка кода в Microsoft =)
                                                                                        • +3
                                                                                          Ассемблерской строке цена иная, нежели сишной.
                                                                                          • 0
                                                                                            Как за стихи и за прозу.
                                                                                            • +1
                                                                                              В ассемблере чем меньше строк, тем выше цена. :)

                                                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.