0,0
рейтинг
25 марта 2014 в 22:00

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] */

Источник
Владимир Владимирович @HotWaterMusic
карма
146,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

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

Комментарии (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
          • +1
            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
        В ассемблере чем меньше строк, тем выше цена. :)
  • 0

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