Если коротко – то да, можно!

Но не все так просто и односложно: на самом деле, чтобы заставить древнюю и крайне устаревшую машину (которая появилась в продаже раньше, чем был изобретен сам интернет в сегодняшнем понимании этого слова), ходить по современному Web-пространству, надо пройти через воду, огонь и медные трубы и не раз пуститься в пляс с бубном.

Разработчику из Денвера – Джеффу Кичеру (Jeff Keacher) удалось сделать почти невозможное. Об этом рассказал в своем блоге сам Джефф, а мы приводим на GB перевод его крайне увлекательной истории.

Как я представил 27-летний компьютер интернету

Возвращение к жизни старого компьютера – это как реставрация классического автомобиля: когда собственноручно «реинкарнируешь» сильно устаревшую вещь и заставляешь ее работать в современных реалиях, чувствуешь какой-то благоговейный трепет.

Точно так же было и с моим первым «настоящим» компьютером, моим Mac Plus, который я решил очистить от пыли и познакомить с современным интернетом.

Мой Macintosh Plus. Внимание, спойлер: на этой фотографии на экране открыта Википедия

По сегодняшним меркам мой старенький Мак совсем уж скромный. В плане спецификаций он с огромным разрывом уступает даже моей электронной читалке Kindle. Еще бы: центральный процессор, работающий с тактовой частотой 8 МГц, 4 МБ оперативной памяти, 50 МБ винчестер и черно-белый дисплей разрешением 512 x 384 пикселей.

Мой сегодняшний десктоп примерно в 200 000 раз быстрее, и я еще не говорю о графическом процессоре. Но все же, это тот самый Мак Плюс, тот самый компьютерный гранит, что я грыз в детстве. Именно эта машина познакомила меня с языком программирования «C», такии понятиями как «жесткий диск», «модем» и даже «интернет».

Да, в каком-то смысле мой Мак уже тогда был подключен к интернету – сначала через BBS-ки (электронные доски объявлений), а позже и через сеть провайдера Lynx, к которой я подключался посредством дозвона обычным телефонным модемом (Dial-up). (Поверьте, ничто не сравнится с эротической литературой, к которой имеешь доступ на скорости 2400 бод в секунду в возрасте 13-ти лет)! Как бы то ни было, все это не имело отношения к стеку TCP/IP и, тупо, работало через терминальную связь, поэтому я никогда не был полноправным членом сети.

Так насколько трудно было бы сегодня исправить такое недоразумение имея на руках Mac Plus и свободное время?

Сначала все шло как по маслу. Я попросил мою маму отправить мне компьютер. Он прибыл в отличном состоянии, ведь все это время (с середины 1990-х) он мирно хранился в ее подвале. Я подключил его, подключил к нему внешний жесткий диск, щелкнул выключателем питания и стал наблюдать, как Mac начал пробуждаться от долгого летаргического сна радостным свечением крошечного кинескопа его CRT-монитора. Конечно, жесткий диск выразил небольшой и ворчливый протест после включения, но потом успокоился и затих, оказалось, что все данные остались на месте. По крайней мере так казалось первые несколько минут.

Конечно, на некоторое время я впал в ностальгию, начал играть в старую-добрую игрушку Glider, и тут я услышал громкий хлопок и почувствовал запах гари. Испугавшись я сразу же щелкнул выключатели и вытащил вилки из розеток. Небольшое исследование корпуса компьютера на предмет источника едкого запаха выявило виновника: внешний жесткий диск. Электричество, побежавшее по компонентам устройства за столько лет забвения вывело из строя один из помехоподавляющих конденсаторов блока питания внешнего жесткого диска.

Треснувший конденсатор из блока питания внешнего HDD

К счастью, Digikey до сих пор продает точно такие же конденсаторы (!), и я умею обращаться с паяльником, поэтому спустя пару дней я снова вернулся к моему Маку, а мой Мак вернулся к жизни.

Далее мне нужно было обзавестись каким-то браузером, обеспечить работу старого софта с TCP/IP, а также физически подключить мой Mac к домашней сети.

Найти веб-браузер было относительно несложно, к счастью, до сих пор в потайных уголках Сети имеются давно забытые пылящиеся, но работающие FTP-серверы с необходимым ПО. Приложение MacWeb 2.0 было достаточно старым, чтобы работать на моем Plus и достаточно новым чтобы рендерить HTML-странички и говорить на языке HTTP. Ну… типа. Но об этом чуть позже.

Только вдумайтесь – в моем распоряжении было целых четыре мегабайта оперативной памяти! С другой стороны, мне повезло, ибо браузер MacWeb требовал для своей работы 2 МБ.

Аналогично удалось найти MacTCP, который смог запуститься на моей версии ОС – System 7.0. Он не поддерживал такую роскошь, как DHCP, однако браузер MacWeb заработал в связке с MacTCP, так что я осуществил-таки на своем древнем железе поддержку стека TCP/IP.

А вот физически подключить Mac к домашней сети оказалось очень непросто. Разумеется, у Mac Plus нет привычного нам сегодня Ethernet-порта, не говоря уже о таких вещах как WiFi (тогда их попросту еще не было в планах разработчиков). Несколько компаний примерно 15 лет назад производили адаптеры SCSI-Ethernet, но эти штуки сегодня невероятно редкие и дорогие. У меня появилась серьезная проблема и я некоторое время обдумывал как ее решить. Решение пришло в голову внезапно – я подумал «а что если использовать последовательный порт и PPP или SLIP в качестве окна во внешний мир»? Навроде dialup-канала, но только без модема.

Для начала я подключил мой компьютер Raspberry Pi обычным патчкордом (из LAN-кабеля) к роутеру. Используя схему сдвига уровня и разнообразные старые адаптеры, мне удалось заставить Raspberry Pi связаться через параллельный порт с Макинтошем. Это что касалось «железячной» части вопроса.

С точки зрения софта тоже предстояло решить как реализовать «коннект» — с грехом пополам я все-таки нашел PPP-клиент, работающий на моем Маке и супер-простой PPP-сервер для Pi, называющийся SLiRP Pi. К счастью, даже нашлась документация, описывающая процесс комбинирования MacTCP, MacPPP и SLiRP.  

Я поколдовал с софтом и мне удалось заставить MacTCP разговаривать с MacPPP, MacPPP разговаривать с SLiRP, SLiRP – с Ethernet-соединением и так далее, пока вся цепочка не позволила подключить «нового интернет-абонента».  Так как последовательный порт ввода-вывода на Mac Plus довольно сильно нагружал процессор, пришлось ограничить скорость соединения до примерно 19 килобит в секунду, но ведь 19 – это лучше чем 0.

Raspberry Pi здорово помогает компьютеру, который в десятки тысяч раз медленнее его самого. В странной конструкции, расположенной в правом верхнем углу принимают участие: схема сдвига уровня, нуль-модем, переходник с DB-9 на DB-25, а также кабель для последовательного порта.

Наверное, у вас уже созрел вопрос из серии «что было первым – курица или яйцо?», то есть – а как мне удалось установить все это древнее ПО на сам Макинтош, не имея связи с интернетом и домашней сетью? Отличный вопрос! Флоппи-привод Мака был достаточно старым и, естественно, несовместимым с аналогичными накопителями для PC. Более того, у меня и не было флоппи для PC – дискетками сейчас мало кто пользуется.

Сначала я попытался пойти путем под названием «100-мегабайтные ZIP-диски», так как накопители стандарта ZIP производились как под интерфейс USB, так и SCSI-1. Мне удалось заставить старый Mac работать с ZIP-дисками (и даже заставить считать ZIP-дисковод – главным загрузочным устройством), также мне удалось подключить ZIP-дисковод к моему современному ПК, работающему под ОС Windows и заставить его работать с дискетами, отформатированными под HFS (с помощью некоторых программных инструментов, разумеется). Как бы то ни было, каждая попытка передать данные с ПК на Mac Plus оборачивалась попорченными файлами на Zip-дискете.

Все попытки с ZIP-дискетами оказались тщетны и оставался только один путь – последовательный порт. К счастью, оказалось, что на Mac’е уже был установлен старый эмулятор терминала под названием Microphone. Microphone поддерживал передачу файлов посредством ZMODEM, наверняка у вас что-то защекотало в голове, если вы имели дело с BBS-ками. 

Итак, для передачи файлов на старый Mac, я скачал софт сомнительной легальности с непонятных FTP-серверов, закинул все это на Raspberry Pi, подключил Pi к последовательному порту Мака, запустил Microphone на Маке в качестве терминала и Minicom на Pi в качестве принимающей терминальные соединения стороны. Нервничая, я начал ZMODEM-ную передачу с Minicom, выбрал нужные файлы и нажал Enter. Minicom выполнил свою работу и я услышал короткий писк! На Маке появилось сообщение «Save incoming file?» («Сохранить входящий файл?»). Немного возни с принятыми файлами и вот я уже наблюдаю на моем старом Mac Plus «новый» софт. Ура!

Итак, я уже подключил Raspberry Pi, установил MacTCP, MacWeb, связал все воедино и запустил. Теперь то я могу погулять по интернету! Ведь так? Да?

Нет, не так. 

Разработчики MacWeb, очевидно, руководствовались спецификациями HTTP 1.0 и думали в свое время что-то вроде – «Да кому вообще придет в голову открывать сайты в интернете по именам?» и оставили без внимания фичу, при помощи которой мы открываем 99,99% сегодняшних интернет-ресурсов. Никакой поддержки человеческих имен виртуальных хостов – только хардкор, только голые IP-адреса. Ах да, еще тогда не успели изобрести HTTPS, куки и CSS.

Черт!!!

Я обратился с проблемой к знакомому, сказав, что не могу понять как решить эту задачу и тут он внезапно, буквально за 20 минут, используя Python, Requests, Flask и Beautiful Soup, соорудил мне фильтрующий прокси. Решение позволило использовать в MacWeb обычные URL-адреса с именем хоста. При этом прокси обрабатывал SSL и куки. А библиотека BeautifulSoup «разжевывала» для MacWeb те вещи, которые браузер не понимал с рождения — CSS, Javascript, картинки и DIV’ы.

Все это позволило в конечном итоге гулять по веб-страничкам и видеть при этом их содержимое. Более того, странички выглядят на удивление читабельными, почти как в каком-нибудь старом мобильном браузере:

Статья про Mac Plus на Википедии, именно так она выглядит на моем Mac Plus

Так выглядит на Маке сайт Hacker News. Читабельно, несмотря на то, что MacWeb не поддерживает CSS в принципе

Конечно, работала вся эта связка невероятно медленно, но она работала! Данные загружались, странички рендерились и открывались, ссылки нажимались и приводили туда, куда они ведут. Даже формы можно было заполнять и отправлять информацию (через раз, но все же).

Вот вам видео, которое демонстрирует насколько долго открываются странички (на каждую уходит по несколько минут!):

http://www.youtube.com/watch?v=5UBRUyofiiU

Как бы то ни было, я достиг поставленной цели и заставил Mac Plus выйти в интернет.

Квест был успешно пройден.