Сеть, эта комбинация HTTP, HTML, XHTML, CSS и JavaScript, представляет собой явно ужасную технологию, и тем из нас, кто заботится о технологиях, особенно о компьютерах, нужно что-то с этим делать.

Сначала мне нужно прояснить пару вещей.

Пояснение №. 1:

Я говорю о Всемирной паутине, не об Интернете. Интернет — это, по сути, TCP/IP и UDP, оба сетевых протокола, и оба чрезвычайно компетентны. Всемирная паутина — это не Интернет, Всемирная паутина — это HTML, CSS, JavaScript, она распространяется через Интернет, это не сам Интернет, даже близко. Сеть — это контент, Интернет — это доставка. WWW — это 10 000 банок кока-колы в грузовике, Интернет — это грузовик и дороги.

Пояснение №. 2:

Я не говорю об улучшении HTTP, HTML, CSS, JavaScript, я говорю об их замене. Ничего из этого не стоит экономить, ни одна из них не является ценной технологией. Я немного преувеличиваю, говоря, что ни одна из этих технологий не является ценной, я совершенно уверен, что есть части кода, которые можно использовать повторно. В конечном счете, я предлагаю заменить каждую часть веб-браузера, в котором вы читаете эту статью, каждая идея в WWW ошибочна.

Давайте начнем с того, почему в Интернете все неправильно.

Сеть — это, по сути, HTTP, HTML, CSS и JavaScript. Все это неправильно.

Почему HTML неверен?

Это интерпретация. Это неверно. Причина, по которой вы можете просматривать фотографию на своем телефоне и одинаково просматривать ее на любом другом компьютере, заключается в том, что форматы PNG и JPEG не интерпретируются. В качестве фактов они заявляют, что пиксель в верхнем левом углу имеет определенный цвет, пиксель после — другого цвета и т. д. Интерпретации нет, значения пикселей являются фактами. HTML, с другой стороны, устанавливает структуру документа и предоставляет браузеру возможность ее компоновки на основе значений в файле CSS. Это означает, что для единообразия макета на всех устройствах каждый браузер должен отображать документ одинаково. Это было нормально для научных документов, для которых был создан HTML, но совсем не годилось для онлайн-приложений, которые мы используем сегодня. Инструкции слишком сложны, чтобы их можно было интерпретировать надежно и многократно. Вот почему я использую Chrome для одних сайтов и Safari для других. Иногда я притворяюсь, что сейчас 2005 год, и тестирую Firefox.

Почему CSS неправильный?

Опять же, это интерпретация, это неправильно. CSS неверен и в других отношениях. В частности, это микроуправление дизайном. CSS предоставляет способы, например, для закругления углов прямоугольника. Но, допустим, вам не нравится закругление, может быть, вы хотели бы, чтобы оно было более плавным, или более грубым, или с изображением посередине, или потолще по краям и потоньше посередине? Вы не можете этого сделать, поэтому вместо этого вам нужно использовать изображения. CSS предоставляет множество способов изменить внешний вид вашего документа, но если эти способы не подходят вашему дизайну, все эти способы становятся излишними из-за изображения. Опять же, каждый браузер должен иметь возможность одинаково интерпретировать CSS. CSS чрезвычайно сложен, и большинство функций избыточны.

Почему JavaScript неверен?

Я программист, а не веб-дизайнер. Я программирую около 25 лет. JavaScript — худший язык, который я когда-либо использовал, за исключением, может быть, AppleScript. Однако ужасность JavaScript на самом деле не проблема, проблема в том, что его невозможно заменить. Всегда. На своем настольном компьютере или сервере я много раз менял языки. Я использовал Python до Java, но предпочел Java. Я использовал C# после Java и снова предпочел его. Я использовал C до всех этих языков и до сих пор люблю его. На моем сервере, на моем Mac или ПК я могу выбрать любой из них. Я использую Python для небольших сценариев, но предпочитаю C# или Go для более крупных проектов. Это выбор, который у меня есть.

У меня нет такого выбора в Интернете, JavaScript — единственная игра в городе, если только мы не готовы бросить свою судьбу с WebAssembly, который в 2020 году все еще остается немного передовым предложением.

На настольных компьютерах Apple может сделать Swift и получить признание среди разработчиков, Microsoft может сделать F# и ожидать, что люди будут его использовать. Google создал Go, и многие программисты используют его в рабочем коде. В сети такого выбора нет, есть один язык, и только один, нет места для инноваций, нет места для изменений, нет места для экспериментов, у вас есть один выбор.

Почему HTTP неверен?

На самом деле, HTTP не так уж и ужасен, в нем есть несколько неудачных дизайнерских решений, он излишне многословен, но он не ужасен.

Остальное отвратительно.

Сеть должна идти, а не улучшаться, не версия 2.0, ее нужно заменить, а не исправить.

Я не пришел к этому решению легко

Я был парнем, который купил первый Chromebook. Я был парнем, который хотел CherryPal (поищите). Я был парнем, который хотел создать операционную среду в Интернете. Я использовал Google Docs, когда он только появился, я писал приложения для BlackBerry Playbook в HTML. Я использовал PhoneGap, Javascript для Chrome и многое другое. Я был парнем, который был взволнован тем, что у Kindle был «экспериментальный» браузер.

Я был тем парнем, который поверил, когда нам всем сказали, что Интернет разрушит монополию Microsoft. Я был тем парнем, который хотел, чтобы Сеть добилась коммерческого успеха, и, конечно же, это произошло.

С технической точки зрения Интернет был катастрофической ошибкой для вычислительной техники, он отбросил технологии в вычислительной технике таким образом, что я съеживаюсь при одной мысли об этом.

Как Интернет отбросил компьютеры назад?

Это слишком сложно и эффективно реализовать уже невозможно.

Вот вопрос: сколько существует совершенно новых, полнофункциональных веб-браузеров?

У меня есть для вас ответ: ноль.

Когда я говорю полнофункциональный, я имею в виду, что он должен делать то, что делает Chrome. Есть попытки вроде NetSurf, но тот не поддерживает Javascript, так что при всех усилиях его в принципе ни для чего не использовать.

Если вы укажете на любой другой веб-браузер, я бы поставил пять баллов, что он основан на существующем движке, возможно, WebKit/Chromium/Blink.

Итак, почему это так плохо?

Если мы согласны с тем, что реализовать веб-браузер нецелесообразно, то мы должны признать, что застряли на существующих движках. Если мы примем это, то нам также нужно признать, что мы застряли с компьютерами, которые могут запускать эти существующие механизмы. Это означает, что мы используем существующие языки, компиляторы и библиотеки, такие как C++, GCC и OpenSSL. Это означает, что мы не можем сделать ничего нового в области вычислений, ориентированных на пользователя. Мы можем делать новые серверные вещи, так как обслуживание Интернета тривиально, а клиентская сторона непрактично сложна.

Представьте себе, если хотите, Интернета не существовало, и если вы создали новую операционную систему для настольных компьютеров или даже операционную систему для смартфонов, вам также не нужно было создавать веб-браузер. Подумайте, насколько это было бы проще, подумайте, насколько свободнее вы стали бы. Существуют невероятные альтернативные операционные системы, реализующие замечательные идеи, но без веб-браузера они никогда не будут реализованы в пользовательском пространстве.

Интернет застопорил инновации в области вычислительной техники для пользователей.

Чтобы быть довольным Интернетом в его нынешнем виде, нужно быть довольным этим:

Разработка настольных и мобильных компьютеров остановлена ​​и останется остановленной. Прогресс в разработке клиентских компьютерных языков, компиляторов и систем завершен.

Получил это далеко? Думаете, я не полон дерьма?

В этом случае вам следует подумать об альтернативах Интернету.

Повторим еще раз: мы не исправляем сеть, мы ее заменяем.

Нам нужно упростить. Я не говорю об упрощении интерпретации JavaScript. Я не говорю о полном отказе от HTML в пользу XHTML. Я говорю о полном отказе. В существующих браузерах может быть ценный код, но нет ценных идей.

Вот идея

Слышали о VNC? Как насчет GoToMyPC? Это способы поместить рабочий стол компьютера в окно и показать его на другом компьютере. Это означает, что, скажем, если вы где-то используете Photoshop на компьютере, вы можете сделать его доступным на любом другом компьютере, на котором можно запустить VNC, который представляет собой небольшой и простой протокол. На самом деле это именно то, что Adobe сделала для того, чтобы сделать Photoshop доступным на Chromebook.

Воу, подожди, подожди секунду, это значит, что любой компьютер, который может запускать VNC, может вообще любое приложение предоставить пользователю? да. Точно.

Если мы признаем, что VNC может представить PhotoShop любому пользователю, то мы, вероятно, можем признать, что он также может представить Facebook?

Итак, вы предлагаете заменить Интернет на VNC?

Неа. Это просто пример того, как очень простая идея (VNC) может заменить очень сложную (WWW). Я предлагаю, однако, рассмотреть идеи, которые делают возможным использование VNC.

Это все картинки. VNC не представляет PhotoShop пользователю, понимая, как работает PhotoShop, он делает это, создавая изображение окна PhotoShop и отправляя его пользователю. Когда что-то меняется в этом окне, VNC отправляет изображение изменения, которое может быть всем окном или может быть только 1 пиксель.

Если мы согласимся с тем, что этот подход прекрасно работает, то мы согласимся с тем, что с таким же успехом можем показать любой веб-сайт, подобный этому, просто отправив изображения в «браузер». Мы заменили десятки миллионов строк кода браузера, HTML, CSS и Javascript несколькими картинками.

Сейчас Интернет начинает выглядеть довольно глупо, не так ли?

Но мы можем сделать лучше, чем VNC. Сила VNC в том, что он может показать что угодно, но это также и его слабость. Поскольку VNC не понимает, как работает PhotoShop, он не может эффективно оптимизировать его отображение. Например, для перемещения большого изображения из одного положения в другое потребуется, чтобы VNC отрисовывал изображение в новом месте, а затем перерисовывал то, что находилось за изображением в старом месте. Что, если VNC уже знал, что стоит за этим? Он мог перерисовать сразу из локального кеша.

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

Современная видеокарта уже не рисует ваш экран со скоростью 30 кадров в секунду. Он собирает его из кэшированных компонентов, находящихся в его собственной памяти, так как это в несколько раз быстрее, чем получение этих компонентов из основной памяти.

Я говорю о замене паутины удаленной видеокартой. Я говорю о сервере, предоставляющем изображения и инструкции о том, где разместить эти изображения клиенту (браузеру). В этой модели отсутствует интерпретация, клиент получает указание разместить изображение на месте и делает то, и только то.

Как и в случае с VNC, любые пользовательские события (например, щелчки, перетаскивания, касания) будут отправляться с клиента на сервер, и сервер соответствующим образом обновляет клиент.

Таким образом, это в значительной степени заменяет Интернет несколькими тысячами строк кода, а основные преимущества заключаются в следующем:

  1. Гораздо более простой дизайн, который легко реализовать на любой платформе и на любом языке.
  2. Никакого кода на стороне клиента, никаких уязвимостей JavaScript, никаких зависших страниц.

Конечно, есть и обратная сторона: загрузка графики на клиент почти наверняка потребует большей полосы пропускания, чем загрузка текста. Однако агрессивное кэширование может свести к минимуму влияние, к тому же наша новая система не загружает пользовательские шрифты, библиотеки JavaScript или файлы CSS. Затраты на полосу пропускания будут, но я считаю, что они вполне управляемы. Мы живем в эпоху, когда мы транслируем фильмы в формате 4K, и нам не нужно беспокоиться об экономии нескольких байтов тут и там.

Но мы можем сделать больше

Теперь, когда мы освободились от наследия Интернета, как далеко мы можем зайти?

Интеграция с собственной платформой

В вебе по сути нет нативной интеграции, якобы это для того, чтобы он был кроссплатформенным, но это фуфло. Возможна интеграция с платформой, на самом деле это просто. Интернет поддерживает несколько разных диалогов, таких как «alert()» и «confirm()», но нет никаких причин, по которым новая система не может поддерживать нативные диалоги, меню, индикаторы выполнения, уведомления и т. д. Совершенно никаких причин. маловероятно, что приложение, написанное с использованием нашей новой системы, будет ошибочно принято за нативное приложение, но мы, безусловно, можем стать ближе, чем Интернет.

Встроенная анимация и эффекты

Анимации Javascript и CSS несовершенны, потому что анимация неразрывно связана с действием. Например, в Javascript я могу анимировать изображение, чтобы оно перемещалось из одного места в другое. Однако, если мой браузер неправильно интерпретирует Javascript или просто отличается от Chrome, тогда он не будет работать. Лучше предоставить простую инструкцию по перемещению и попросить клиента анимировать действие, если это возможно. Итак, действие выполнено без анимации, анимация необязательна, если, например, пользователь решил отключить анимацию по своим причинам или, возможно, клиент не подходит (т.е. экран с электронными чернилами не может вообще делать анимацию). Однако клиент, написанный на мощной платформе, такой как Mac или Windows, мог бы анимировать его с удовольствием, клиент мог бы даже анимировать его по-другому для слабовидящих пользователей, даже со звуком, если это необходимо. Принцип заключается в том, что сервер требует действия клиента, но клиент может реализовать действие по своему усмотрению.

Полная гибкость дизайна

Поскольку в нашей новой системе нет ни текста, ни шрифтов, ни возможности векторного рисования, а все содержимое представляет собой графику, это означает, что дизайнер может делать все, что возможно в 2D-изображении. Если консорциум Unicode не поддерживает выбранный вами язык, какая разница, новая система может отображать что угодно, Unicode или нет.

Вы серьезно думаете, что можете заменить Интернет?

С точки зрения людей, использующих его, нет. Сеть, вероятно, станет фиксированной частью Интернета в обозримом будущем.

Но мы можем попробовать.

Меня интересуют информатика, я хочу, чтобы компьютеры и вычисления совершенствовались, развивались и менялись. Я хочу, чтобы вычислительная техника была разнородной меритократией, в которой может сосуществовать множество различных идей, и идеи добиваются успеха благодаря своим достоинствам, а не своей позиции устоявшейся монополии.

Не заблуждайтесь, WWW — это монополия, и особенно вредная. Всемирная паутина наложила де-факто язык на JavaScript и фактически диктовала, как следует создавать операционные системы на стороне клиента, требуя очень сложного клиента, такого как WebKit, и всех необходимых зависимостей.

Вычислительная техника не может и не будет двигаться вперед, пока требуется внедрение WWW. Это слишком сложно и налагает правила на разработчиков операционных систем еще до того, как они начнут.