«Hello Habr!» на Xerox Alto
Xerox Alto — компьютер, разработанный в исследовательском центре Xerox PARC в 1973 году. Первый в мире компьютер, использовавший метафору «рабочего стола» и графический пользовательский интерфейс. Это легенда компьютерной индустрии, оказавшая огромное влияние на все дальнейшее развитие компьютеров и ПО.
С помощью эмуляции мы погрузимся в то замечательное время, напишем и скомпилируем тестовую программу на BCPL — прадеде языка С.
Слева эмулятор, справа — один из сохранившихся оригиналов.
Несмотря на то что рабочие станции Xerox Alto никогда не продавались как коммерческий продукт, а использовались только внутри самой корпорации Xerox и еще нескольких исследовательских центров — небольшое количество таких машин все же дожили до наших дней, были восстановлены и ныне поддерживаются в работоспособном состоянии руками фанатов.
Один такой энтузиаст из солнечной Калифорнии занимается восстановлением до полной работоспособности сохранившейся рабочей станции и описывает процесс в своем блоге.
Получается с трудом, с помощью большого опыта, работы с осциллорафом и сообщества фанатов-учетных со всей планеты.
Вот так например выглядит жесткий диск:
Как вам размерчик?
Эмуляторы
Обнаружилось целых три действующих эмулятора Xerox Alto, позволяющих без особых проблем запускать столь древний софт на обычном современном x86 компьютере.
ContrAltoJS
Реализация эмулятора на Javascript, работает в браузере:
This is a pure JavaScript implementation of the ContrAlto Xerox Alto emulator. The end goal is a usable, performant Xerox Alto emulator running in your web browser.
Исходники находятся вот тут.
Это наверное самый легкий способ посмотреть Xerox Alto, но к сожалению эта реализация очень медленная, имейте ввиду сей прискорбный факт.
ContrAlto
Современный эмулятор на C#, созданный сотрудником Living Computers Museium, собираемый и запускаемый без особых проблем как на Windows так и на Linux:
Living Computers» Engineer Josh Dersch spent more than a year creating this emulator of the Xerox Alto, a pioneering computer workstation developed at the Palo Alto Research Center (PARC) in 1973. The Alto introduced several experimental concepts, including the graphical user interface, object-oriented programming, and Ethernet networking.
Исходники находятся тут, доступна также бинарная сборка.
Собирается из исходников без особых проблем как в Windows так и в линуксе. Бинарная сборка запускается и на FreeBSD тоже (с Mono), но официально это не заявлено.
На заглавной картинке к статье запущен именно этот эмулятор.
Salto
Наверное самый «хардкорный» вариант — на чистом Си, актуальные исходники проекта находятся вот тут:
SALTO — Xerox Alto I/II Simulator. Not a project of mine, just to keep this code from getting lost
Поскольку код был выложен 11 лет назад, думаю вы и сами догадываетесь что проект слегка устарел и так просто уже не собирается — пришлось немного поправить.
В первой версии статьи я использовал этот эмулятор, но ради более широкой аудитории решил все же переключиться на более обыденный и легкий для пользователей ContrAlto. Если же вам интересно мясо и хардкор особенности сборки нативного эмулятора еще и под FreeBSD — смотрите оригинальную статью.
BCPL
Но прежде чем переходить к тыканью по кнопкам и вводу команд в эмуляторе, стоит все же немного рассказать и о самом BCPL:
BCPL (Basic Combined Programming Language) — язык программирования, разработанный Мартином Ричардсом в 1966 году в Кембриджском университете.
Разумеется столь сухое описание из википедии даже близко не передает ни его мощи ни легендарности. А ведь этот язык — важная веха развития программирования, сильно повлиявший на появившейся много позже Си:
BCPL has had a productive life of its own, but my interest in it is more in the basis it provided for the development of the B language and then in the history of C. This influence is traced, with gratitude, in the latter paper. As it tells, the BCPL language definition when B was developed was just the manual recorded here, together with the compiler that Richards contemporaneously wrote for the CTSS system.
Цитата выше между прочим с сайта Bell Labs, той самой Bell Labs, которая присутствует в любой книжке по компьютерной истории начиная с изобретения телефона.
Для иллюстрации вот так выглядел код на BCPL в далеком 1972 м (взято из исходников самого компилятора):
if SourceName!0 eq 0 do Error("No source file name")
if SourceDevice!0 eq 0 do Movestring(SourceName, SourceDevice)
if BinName!0 eq 0 do Error("No binary file name")
test SWTTOfile % (SWOutput & not SWTTOtype)
ifso
[
if OutputName!0 eq 0 then Error("No output file name")
OutputStream = OpenOutput(OutputName)
]
ifnot [ OutputStream = TTOstream; OutputName!0 = 0 ]
test SWTTOfile
ifso ErrorStream = OutputStream
ifnot ErrorStream = TTOstream
...
На мой взгляд читабельней даже современных языков, не находите?
Обнаружилось еще более удивительное — силами «фанатов‑историков» компилятор BCPL был портирован на x86-архитектуру: раз и два.
Также один из этих портов я смог собрать и использовать для компиляции тестового приложения (см. оригинал статьи) на x86 машине, уже безо всякой эмуляции, но чтобы не отвлекаться от темы — пропустим.
«Hello world» на Xerox Alto
Все манипуляции проводились на обычном Linux, использовался эмулятор ContrAlto. Из требований к среде только наличие установленного Mono:
mono --version
Mono JIT compiler version 6.12.0.182 (tarball Fri May 5 03:10:06 UTC 2023)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
Interpreter: yes
LLVM: supported, not enabled.
Suspend: hybrid
GC: sgen (concurrent by default)
Образы дисков можно скачать вот отсюда, для работы с компилятором будет нужен файл tdisk4.dsk.Z
По какой‑то неведомой причине, казалось бы более актуальный образ bcpl.dsk содержит сломанный редактор (bravo), поэтому у меня не получилось его использовать.
Образ диска необходимо распаковать перед использованием — оказалось что ContrAlto (в отличие от Salto) не умеет работать с архивированными образами:
zcat tdisk4.dsk.Z > tdisk4.dsk
Скачиваем эмулятор с раздела Releases в Github-репозитории проекта, нужный файл: ContrAlto-mono.zip
Распаковываем и запускаем:
mkdir contralto
cd contralto
unzip ../ContrAlto-mono.zip
mono ./Contralto.exe
В запущенном эмуляторе появится своя собственная консоль, со своими командами:
mono ./Contralto.exe
ContrAlto v1.2.3.0 (c) 2015-2018 Living Computers: Museum+Labs.
Bug reports to joshd@livingcomputers.org
You are at the ContrAlto console. Type 'show commands' to see
a list of possible commands, and hit Tab to see possible command completions.
>
Нужно загрузить образ диска:
>load disk 0 disks/tdisk4.dsk
Drive 0 loaded.
>
И вызвать команду запуска эмуляции:
>start
Alto started.
Появится графическое окно эмулятора, с запущенным Xerox Alto внутри:
Окно как и оригинальная система имеет «портретное» соотношение сторон, поэтому может не влезть в экран
Внутри все. крайне необычно для современного пользователя:
Команда '?' покажет список файлов на диске — только файлов, если я ничего не упустил то концепции каталога тогда еще не было.
Все файлы с расширением .RUN являются запускаемыми, для запуска достаточно ввести имя такого файла без учета регистра и он запустится.
Например для просмотра содержимого файла используется команда type (TYPE.RUN):
Кто-то тестировал работу цикла в 1983 м году
Насладиться версией сборки можно командой release:
Этот релиз был за ~2 месяца до моего рождения
Насладившись единением с историей, запускаем наконец текстовый редактор bravo:
Да, это самый первый WYSIWYG редактор на свете.
Нажимаем клавишу i (INSERT) и вводим вот такой код:
// Hello world demo
get "streams.d"
external
[
Ws
]
let Main() be
[
Ws("Hello Habr!*N")
]
После ввода нажимаем ESC, затем клавишу p и вводим имя файла:
hello.bcpl
Затем опять нажимаем ESC (НЕ Enter!) и запустится процесс сохранения, визуально медленный.
После сохранения на диск будет сообщение:
Нажимаем клавишу q и затем Enter для выхода из этого замечательного редактора.
Теперь запускаем компилятор BCPL:
bcpl hello.bcpl
Вот так выглядит результат компиляции в эмуляторе:
Теперь запускаем линковщик (да да это все еще 1972 год!):
bldr/d/l/v hello
Обратите внимание на передачу параметров линковщику:
bldr это само приложение, а /d/l/v — параметры, которые идут подряд сразу после имени приложения и без пробелов.
Вот так выглядит результат работы линковщика:
Наконец запускаем само приложение:
hello
Результат:
Поздравляю — вы только что прикоснулись собственными руками к истории ИТ индустрии, практически вживую.
Эпилог
Проект Xerox Alto это в чистом виде история всей компьютерной индустрии. Важная ступень развития, определившая все дальнейшее развитие компьютеров.
Разумеется столь невероятные по своей мощи исследовательские рабочие станции, созданные и использовавшиеся еще до моего рождения, никогда не появлялись на территории СССР/РФ, даже в самих США про этот проект было мало информации в те годы.
Запустить эмулятор этой станции и увидеть ее вживую — означает прикоснуться к истокам всей ИТ-индустрии, увидеть откуда пошли принципы построения программ, графические редакторы да и сам интерфейс вообще.
А лазая по выложенному архиву исходного кода Xerox Alto, можно воочию убедиться насколько на самом деле стары принципы работы компьютеров и разработки ПО.
Невероятный опыт, рекомендую.
0×08 Software
Мы небольшая команда ветеранов ИТ‑индустрии, создаем и дорабатываем самое разнообразное программное обеспечение, наш софт автоматизирует бизнес‑процессы на трех континентах, в самых разных отраслях и условиях.
Оживляем давно умершее, чиним никогда не работавшее и создаем невозможное — затем рассказываем об этом в своих статьях.