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
            +7
            Кто сказал Pebble?
            –5
            «Скандалы, интриги и расследования!»
              +7
              Форков не будет. Лицензия несвободная.
              +10
              Скоро портируют на ардуину.
                +8
                а потом появится PiMS-Dos
                  +134
                  PiS-Dos
                    +3
                    блин, я стрелку перепутал(
                +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, условие выполняется.
                        +5
                        Да. Я дурак, прочитал не так.
                          0
                          del
                          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
                                                                          +5
                                                                          Ждём пулл-реквестов )
                                                                            +2
                                                                            Так и до Win 8 недалеко :)
                                                                          +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кб
                                                                                    0
                                                                                    Конечно же…
                                                                                    +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
                                                                                                            Думаю, самыми большими разделами будут «Экспрессионизм», «Сюрреализм» и «Культура народов Юго-Восточной Азии»…
                                                                                                              +2
                                                                                                              Русские народные :)
                                                                                                        +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
                                                                                                              В ассемблере чем меньше строк, тем выше цена. :)

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

                                                                                                            Самое читаемое