Массовое распространение клонов IBM PC привело к резкому увеличению количества людей, активно занимающихся программированием на компьютере, а следовательно, и прослойки компьютерных "фанатов". Если раньше этот тип людей встречался в основном в университетских городках и больших вычислительных центрах, то с распространением клонов IBM PC ситуация существенно изменилась. Обладателями мощных и в то же время дешёвых компьютеров стали школьники, пенсионеры, а также другие лица, располагавшие, помимо желания попробовать свои силы в программировании, еще и значительным количеством свободного времени.
Как и в других областях человеческой деятельности, спектр отношения людей к программированию и вычислительным машинам очень широк: от ненависти, через полное безразличие до патологической привязанности или зависимости, которую можно квалифицировать как манию. Всякий работавший в вычислительном центре на больших ЭВМ и видевший, как к концу второй смены некоторые программисты наспех вносят плохо продуманные изменения в свои программы и умоляют электронщиков дать еще минутку, чтобы посмотреть, что получится, узнает сцену, описанную Ф.М.Достоевским в романе "Игрок":
"В одиннадцатом часу у игорных столов остаются настоящие, отчаянные игроки, для которых на водах существует только одна рулетка, которые и приехали для нее одной, которые плохо замечают, что вокруг них происходит, и ничем не интересуются весь сезон, а только играют с утра до ночи и готовы были бы играть, пожалуй, и всю ночь до рассвета, если б можно было. И всегда они с досадой расходятся, когда в двенадцать часов закрывают рулетку. И когда старший крупер перед закрытием рулетки около двенадцати часов, возглашает: "Les trois derniers coups, messieurs!" (Три последних игры (букв.: удара), господа - прим. перев.), то они готовы иногда проставить на этих трех последних ударах все, что у них есть в кармане, - и действительно тут-то наиболее и проигрываются" [Полн. собр. соч. в 30-ти томах. - Л.: Наука, т.5, 1973, c.292].
Увы, эпоха ушла. Запрещают везде доступы. Блокируют чужой код цифровой подписью. Наверное, правильно делают. Но куда теперь податься хакерам. Как войти в эту реку второй раз?
Для этого надо проанализировать, а что делало эту реку такой?
Прозрачность
DOS был примечателен тем, что не утаивал от программиста подробности реализации. Всё в системе было как на ладони. Особенно, когда появились отладчики вроде AVPUTIL. Всю память реального режима можно посмотреть. В отладчике можно по инструкциям походить, посмотреть, как это всё работает. И, посмотрев, сделать и своё.
Пространство для мастерства
Разрабатывать под DOS было непросто, но у кого получалось, те получали признание.
Например, FoxPro был движком баз данных в формате dbf, и средой разработки со своим языком программирования. Управление базами данных в DOS требовало мастерского обращения со всевозможными типами расширенной памяти (UMB, HMA, EMS, XMS) и выгрузкой на диск. Расширенная память так устроена, что в каждый момент времени программы видят не всю выделенную память, а только лишь окна. Окна можно переключать, чтоб отображали разные участки памяти. Для работы с этими сущностями в FoxPro применяются аналоги указателей, и всё это за несколько лет до того, как обобщения указателей начали появляться в C++ (перегрузка operator *).
Отдельный разговор можно посвятить тому, как управляться с видеокартой. Это касается и графических режимов, и текстовых. В текстовых режимах компьютер работал заметно побыстрее, но ведь так хотелось немного красоты. Так что программисты перепрограммировали шрифт и придавали особый вид своим программам. Это MS-DOS Shell, Norton Utilities, ASPLoader, Acronis OS Selector.
С появлением защищённого режима жизнь программистов стала проще не во всём. В DPMI (DOS Protected Mode Interface) основным режимом по-прежнему является реальный. То есть, чтобы записать на диск или прочитать с диска, или провзаимодействовать с мышью, нужно постоянно выходить из защищённого режима обратно в реальный. Для этих взаимодействий в DPMI предусмотрено API создания двусторонних переходов. Можно выделять новые заглушки. Это ресурс, а ресурсами надо управлять. Где есть выделение, там нужно и освобождение.
Широкая аудитория
И последняя вишенка на торте. То, что сделал программист, было, кому посмотреть. Ведь так-то и сейчас хватает любителей даунгрейда. Но понятно, что нас мало, и мы кто в лес, кто по дрова. Кому-то дорога эпоха DOS, у кого-то навсегда Windows 98, а у кого-то Windows XP, QIP и ICQ. В настоящую эпоху DOS ведь всё было не так. У всех было примерно одно и то же, и даже между DOS и Windows 9x разница была ещё не столь велика. В Windows 9x можно было создать такой ярлык (pif) программы, который перезагрузит компьютер в эту программу в чистом DOS. Только с Windows Millenium, 2000 и XP начал ломаться привычный мир.
То, что сделал программист, было практически единственным способом это сделать. Ну, то есть, если сейчас писать под DOSBox, то можно ведь и без DOSBox сделать то же самое, но лучше. А тогда DOS был практически всем. Практически абсолютом.
Новая река
Широкая аудитория
По указанным трём критериям на роль нового захода в реку внезапно хорошо начинает подходить WebAssembly. Среди любителей даунгрейда есть мнение, что новый DOS — это UEFI. То, что в современных компьютерах вместо BIOS. Ведь там можно запускать exe, там есть UEFI Shell. Под UEFI написали тетрис и файловый менеджер. Да, это впечатляет, но это слишком прямая аналогия. Среди проанализированных пунктов выше хромает по части «Широкая аудитория». Многие ли станут перезагружать свой компьютер в чистую среду UEFI? Да даже в виртуальную машину загрузить не хочется. Не правда ли.
В этом выгодное отличие WebAssembly. Он теперь есть в каждом браузере. Сможешь его покорить? Иди и возьми его. В маркетинге есть правило, что каждое лишнее действие уменьшает конверсию, а в WebAssembly с этим всё максимально хорошо. Поставь на любую страницу, если есть, что поставить.
Прозрачность
WebAssembly не позволяет вглядеться, что происходит в недрах браузера, но то, что происходит в самом WebAssembly, так же прозрачно, как это было в DOS. Ну, примерно. Полной аналогии, конечно, нет, но нам хватит. Больше всего не хватает, что чужие программы не в WebAssembly, они-то чаще всего в JavaScript. С другой стороны, довольно часто встроенным отладчиком браузера можно изучать и чужой JavaScript тоже.
В отличие от DOS, в WebAssembly придётся самим себя развлекать, самим наполнять и память Wasm.Memory, и другие ресурсы Wasm.
Пространство для мастерства
А вот с этим полный порядок. В DOS DPMI было управление замыканиями для перехода между реальным режимом и защищённым. В WebAssembly системному программисту полно развлечений для связи WebAssembly и JavaScript, а без JavaScript не получится взаимодействовать с браузером. JavaScript играет роль как бы реального режима в DPMI. То, куда надо выходить, чтобы взаимодействовать с окружающей действительностью.
Но особенное мастерство требуется в организации передачи управления. WebAssembly встроен в браузер и наследует его ограничения. Принципиальное ограничение, — нельзя долго исполнять код. В достаточно обозримое время нужно возвращать управление на самый верх. Управление внутрь WebAssembly попадает только из JavaScript, так что надо полностью выходить наверх из WebAssembly, и дальше выходить из JavaScript тоже, передавая управление в сам браузер.
Можно, например, отправить данные по WebSockets, но чтобы получить ответ, надо повесить обработчик событий и полностью выйти. И так много, где. Это вызов!
Это пространство для мастерства даже больше, чем в DOS. Это такое пространство для мастерства, как при разработке новой операционной системы во времена, когда люди активно экспериментировали с ними. Ещё в 2000е было нормально практиковать мультизагрузку операционных систем. Попробовать у себя Linux или другую операционную систему.
В новой операционной системе для WebAssembly вместо прерываний события браузера. Это и таймер (window.setTimer, window.setTimeout), и весь UI.