Next: Преимущества и недостатки redo, Previous: Why I won’t use Let’s Encrypt, Up: Articles
Под современным Web я понимаю распределённую систему раздачи закрытого исполняемого кода. Под старым добрым Web я понимаю распределённую систему раздачи документов. Прежде мы использовали броузеры чтобы по стандартизованным протоколам получать документы, такие как HTML и сопутствующие им изображения например. А также заполнять формы, делать запросы, в общем иметь достаточный для большинства задач интерактив. Сейчас наши броузеры используются для прозрачного скачивания исполняемого кода и его выполнения в виртуальной машине броузера.
Если человек хочет использовать только свободное ПО, то современный Web для него неприемлемый вариант, так как сайты распространяют закрытый код (обфускация, WebAssembly, и т.д.).
Это также и угроза безопасности: заход на современный Web-сайт идентичен скачиванию исполняемого .exe и его запуску. Виртуальная машина не может кардинально помочь в изоляции вредоносного кода: особенности работы большинства процессоров позволяют читать и изменять данные в произвольных местах оперативной памяти, даже из JavaScript программы запускаемой внутри броузера под виртуальной машиной другой операционной системы. Кроме того, размер и скорость изменения кода броузеров настолько велики, что в нём не может быть хоть сколько-то пристального аудита и мы постоянно из года в год видим множество уязвимостей, когда JavaScript код может вылезть за пределы броузера или хотя бы контекста сайта в котором он работает.
По сути, современный броузер это средство удалённого управления вашим компьютером. Зашёл на сайт, он тебе дал код который броузер автоматически прозрачно скачивает и исполняет. Код может скомпрометировать всё что есть на компьютере, так как нет ни одной рабочей защиты от вредоносного кода.
WWW – наихудший магазин приложений!
Может создатели сайтов всё это делают не со зла? Всё же ещё много сайтов остаются рабочими даже без включённого исполнения кода (отключённого JavaScript). В 99% случаев, если отключить JavaScript: исчезнет реклама и куча систем слежки, сбора данных, телеметрии, счётчиков посещений (всё это одно и то же). То есть, в 99% случаев этот JavaScript (+WebAssembly и всё смежное с ними) используется явно не для благих целей пользователей, а для нарушения их приватности.
Может быть создатели броузеров всё же стараются обеспечивать нашу приватность и безопасность? Отнюдь, ведь сами же эти броузеры её первым делом активно и нарушают, плюс используют для подсовывания рекламы, а также для политических игр. Плюс они старательно запрещают и мешают установке дополнений/кода который бы не был скачан с их централизованных цензурируемых ресурсов:
Ссылок про Chrome/Chromium меньше, просто потому что они с самого начала делали всю эту "телеметрию" и особо не скрывали что по полной следят за пользователем. Apple броузеры аналогично проводят слежку. Но в Apple мире слежка и цензура устраиваются на уровне вообще всей ОС.
Из популярных броузеров нет ни одного, кто действительно бы уважал приватность. Безопасность, при таком объёме часто изменяемого кода, практически невозможно с технической точки зрения обеспечить. Броузеры, по факту, являются первостепенными нарушителями приватности и они из года в год затачиваются под постоянную слежку за всеми действиями пользователей.
От версии к версии, в броузерах пропадает функционал по управлению cookies или даже доверенными X.509 сертификатами. Если не пропадает, то через менюшки штатно его уже не получить. Чтобы ограничить возможность контроля пользователя над своими действиями и ресурсами которые он хочет посещать.
Хорошо, Chrome/Chromium с самого начала не могли рассматриваться из-за проблем с приватностью. Но почему не взять ещё "не испорченную" версию Firefox? Я не раз встречался с тем, что современный JS код просто не будет под ней работать. Если не обновлять броузер раз в 1-2 года, то все новые (и обновлённые) JS-поделки не будут работать.
А взять версию не настолько старую, но выпилить из неё слежку и цензуру? API Firefox менялся так часто и кардинально, что прежде мною используемые плагины (Pentadactyl главным образом) уже не работают. Использовать броузер без него проблематично – это мука. Более того, современный Firefox невозможно собрать без скачивания из Интернета бинарного исполняемого файла: для сборки нужен Rust, который не собрать по другому. mrustc пытается сделать сборку без этого бинарника (кем, как когда, с какими backdoor-ами собран?), но под FreeBSD мне так и не удалось его завести и авторы Rust не парятся по этому поводу. Да и вроде бы Firefox перестал поддерживать OSS, что означает отсутствие звука в FreeBSD.
Резюмирую:
Раньше я писал немного более детально про JavaScript:
Что бы я мог предложить как решение, когда всё же не хватает Web 1.0 технологий? Или предложить как решение, но не требующее запуска у себя проприетарного ПО? Я бы предложил делать аналог BBS-ок: они не предлагали качать какой-то интерпретируемый код для своей работы – они просто предоставляли удалённый доступ, просто такой telnet. Современный Web-сайт, раз перехватывает нажатия клавиш, раз в нём нет "документов", то в нём всё равно не будет работать поиск ("/" в Pentadactyl), не будет работать pgUp/Down, копирование в буфер обмена, сохранение HTML-страницы, чтобы в offline посмотреть – раз всё равно ни черта в нём не работает, то можно было бы предоставить VNC/X11-like удалённый доступ до сервера с запущенным приложением. Разработчики приложения вообще могут писать его на чём угодно, а мы использовать эти приложения просто по VNC/X11, ничем не жертвуя в плане удобства (всё равно ни черта не работает функционал броузеров как прежде), зато не запуская у себя никакого ПО извне.
Плюс, я мог бы поспорить что и трафик это могло бы сэкономить, при хорошем сжатии графики, ибо 10мин FullHD запись экрана работы за компьютером у меня в VP9-lossless заняла 22.5MiB всего, для примера. А X11-like в теории вообще может занимать копейки, при сжатии растровых изображений.
Next: Преимущества и недостатки redo, Previous: Why I won’t use Let’s Encrypt, Up: Articles