ВЕБ-БРАУЗЕР, КАК УНИВЕРСАЛЬНЫЙ ИНТЕРФЕЙС ДЛЯ ПРОИЗВОЛЬНЫХ ПРОГРАММ

Опубликовано в журнале: Научный журнал «Интернаука» № 9(279)
Рубрика журнала: 3. Информационные технологии
DOI статьи: 10.32743/26870142.2023.9.279.353606
Библиографическое описание
Савин М.Э. ВЕБ-БРАУЗЕР, КАК УНИВЕРСАЛЬНЫЙ ИНТЕРФЕЙС ДЛЯ ПРОИЗВОЛЬНЫХ ПРОГРАММ // Интернаука: электрон. научн. журн. 2023. № 9(279). URL: https://internauka.org/journal/science/internauka/279 (дата обращения: 21.11.2024). DOI:10.32743/26870142.2023.9.279.353606

ВЕБ-БРАУЗЕР, КАК УНИВЕРСАЛЬНЫЙ ИНТЕРФЕЙС ДЛЯ ПРОИЗВОЛЬНЫХ ПРОГРАММ

Савин Михаил Эдуардович

ст. преподаватель, Московский Педагогический Государственный Университет,

РФ, гМосква

 

WEB BROWSER AS A UNIVERSAL PROGRAM INTERFACE

Michel Savin

Senior Lecturer, Moscow Pedagogical State University,

Russia, Moscow

АННОТАЦИЯ

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

ABSTRACT

When working on a computer, the user uses the browser most of the time. This is possible due to cloud technologies. Web browser as a universal interface for launching programs is considered

 

Ключевые слова: Веб браузер, Операционные системы, облако, веб-компиляция.

Keywords: Web browser, Operating systems, Cloud, Webassembly.

 

Популярные сегодня облачные решения, востребованные из-за массового развития Интернета, стараются охватить как можно больше областей человеческой деятельности. Классификация этих решений возможна по различным критериям, но обычно осуществляется по типу услуги (сервиса). Основное деление –  это IaaS (инфраструктура-как-сервис), PaaS (платформа-как-сервис) и SaaS (программы-как-севис). Амбициозная задача, поставленная разработчиками облачных инфраструктур – организация облака по принципу XaaS (все-как-сервис), очевидно является интересной тенденцией развития, но по понятным причинам может быть осуществлена только в некотором приближении. В истории компьютерной техники уже неоднократно выбирался тот или иной вектор развития на некий универсальный подход. Достаточно вспомнить, к примеру, персональные компьютеры фирмы IBM, под лозунгом IBM-совместимости, заменяющие собой весь парк несовместимых машин в 80-90 годах. Или менее известный пример – Операционной системы UNIX, разрабатываемой с конца 60-х годов. Ведь первые буквы "UNI" в названии этих операционных систем означают именно стремление к унификации –  стандартный набор программ, стандартный набор протоколов, стандартизация интерфейсов и пр. В первом случае, фактически, процесс универсальности компьютерных систем был решен, но все равно появляются и будут создаваться в будущем компьютеры различной архитектуры. Второй пример мало знаком обычным пользователям, поскольку на большинстве персональных компьютеров используются другие Операционные системы (ОС). А если и, к примеру, на смартфонах  используется ОС Linux (как основа для Android)  или iOS, то мало кто из пользователей задумывается, что эти системы являются потомками UNIX и придерживаются все тех же правил совместимости и стандартизации.

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

  1. Виртуализация. Средство, позволяющее эмулировать аппаратную архитектуру одного компьютера на другом;
  2. Контейнеризация. Этот подход позволяет создать контейнер со средой (элементами ОС и необходимыми приложениями) для запуска определенной программы, скомпилированной под другую ОС.

 

Рисунок 1. Программа Календарь

 

Но существуют, начиная с 80-х годов и другие методы. Например, запуск программы на машине с одной архитектурой, а отображения ее работы на компьютере с другой аппаратной архитектурой и другим программным окружением. На рис.1 показана программа Календарь, запущенная на сервере HP Integrty с процессором Intel Itanium под операционной системой OpenVMS, а вывод осуществляется , на обычный IBM-совместимый компьютер под ОС Linux по X-протоколу.

Скорость работы компьютерных сетей в настоящее время позволяют передавать как текстовую, так и графическую информацию в достаточно хорошем разрешении, практически приближаясь к режиму реального времени. Таким образом, если мы рассматриваем решения SaaS –  программное обеспечение, как услуга, будет крайне расточительно не использовать множество программ, созданных под различные операционные системы и процессоры за многие годы, оставаясь только в рамках современных облачных решений, для которых интерфейсом часто служит веб-браузер. Иными словами, попробуем дать ответ на вопрос:"Какие существуют способы запуска программ, написанных под ОС, с возможностью ввода/вывода информации в окне браузера?"

Причины этого вопроса в следующем:

  • Технология веб-браузеров в настоящее время позволяет абстрагироваться от ОС сервера. А это означает, что для конечного пользователя отсутствует проблема конфигурации и настройки;
  • Далеко не всегда необходимая нам программа может быть найдена на локальном компьютере или в облаке;
  • Часто бывает, что система, на которой мы в данный момент работаем, не предоставляет нам прав на установку сторонних программ. И мы вынуждены использовать сетевые решения;
  • Также, далеко не всегда, необходимая нам программа имеет клиент-серверную архитектуру, с доступной клиентской частью.

Первое решение – браузерный интерфейс для ОС Linux, позволяющий использовать консольные программы, или программы с псевдографикой библиотеки ncurses. Пример на рис.2.

 

Рисунок 2. Консольная программа в браузере

 

В данном случае используется веб-терминал shellinabox. Можно использовать и другие веб-терминалы[1,2].

Конечно, у нас не будет таких обширных возможностей, как при работе с ssh, но не всегда они и нужны. К примеру, для обучения программированию и/или системному администрированию вариант использования веб-терминала даже более удобен, чем соединение через ssh, т.к. будет работать в любой ОС, где есть веб-браузер (или даже без Операционной системы). Для обучение можно далее подключить терминальный мультиплексор [3], к примеру, Tmux, и работать с обучаемым совместно в одном терминале, наблюдая его действия и исправляя возможные ошибки, в том числе и удаленно.

Для графических систем, рассмотренные терминалы не подходят. Известно, что существуют современные протоколы (RDP, VNC и др.), которые позволяют работать с графическим окружением по сети. Но для этого необходимо устанавливать клиентские приложения. Есть ли возможность запустить графическое окружение в веб-браузере? Да, такая возможность сегодня существует. К примеру, noVNC [4]. Используя noVNC можно организовать удаленный доступ к системе. Пример настройки доступа к компьютеру с Windows [5].

Принципиально иной подход –  возможность запустить отдельную программу в браузере. Это возможно, к примеру, для несложных графических программ, написанных с использованием библиотеки Gtk. Дисплейный сервер broadwayd прост в настройке. И позволяет за несколько простых команд вывести на страницу веб-браузера программу и работать с ней. Для этого всего лишь необходимо запустить сам сервер:

$ broadwayd -p <port> :<DISPLAY>

И настроить переменные окружения для программы:

$ GDK_BACKEND=broadway BROADWAY_DISPLAY=:<DISPLAY> gnome-calculator

Это решение очень удобно. Но, к сожалению, это чуть ли не единственный вариант для графической библиотеки.

 

Рисунок 3. Графическая программа Gtk в браузере

 

Ограничение по использованию графических библиотек можно избежать, если у нас есть исходный код программы, которую мы хотим запустить удаленно в веб-браузере. Проект Webassembly [7] создан именно для подобной ситуации. Ограничения по используемым языкам программирования [8], доступным в проекте сегодня уже не столь критичны. Webassembly (wasm) представляет собой виртуальную машину, написанную специально для веб-браузеров. А это означает, что код программы будет исполняться не на сервере, с отображением в окно браузера, а, по большей части, на машине клиента. Фактически, мы получаем некую виртуализацию на своем компьютере, в которой выполняются программы из удаленного источника. Цена этого процесса –  трансляция в байт-код виртуальной машины. Любые виртуальные машины, т.е. компьютеры, созданные программно, конечно же, отстают по скорости от физических компьютеров. Тем не менее, скорость современных машин позволяет виртуализировать большое число ранее написанных программ.

 

Рисунок 4. Программа, собранная в Webassembly

 

На рис.4 эмулятор советской вычислительной машины УК-НЦ, работающий в браузере. Удобства и преимущества такого подхода очевидны. Так же существует возможность передачи и получения данных из/в локальный компьютер, что позволяет работать с программой оттранслированной в wasm так же (или почти так же) как с программой, собранной в ОС.

Несмотря на многолетнее развитие компьютерных систем и их программное обеспечение, ситуация, когда возможен запуск и работа с любой программой в некой универсальной среде выполнения, остается недостижимой. Для более старых программ это не критично, т.к. они могут быть исполнены в различных эмуляторах или виртуальных машинах из-за своей нетребовательности к аппаратным ресурсам. Современные же программы зачастую настолько сложны, что их выполнение возможно только на той архитектуре, для которой они изначально создавались. К примеру, затруднительно даже запустить последние версии Microsoft Office в Linux. Пользователям же напротив хотелось бы, чтобы запуск программ происходил без ограничений. Облачные решения (SaaS) в настоящее время удовлетворяют некоторые потребности пользователей, но имеют, как ограничение по функционалу, так и по многообразию, в сравнении с программами, созданными ранее. Надеемся, что в будущем большинство программ будут создаваться не только для трех известных ОС (Windows, Linux, MacOS), но и для запуска их в веб-браузере. Пример хорошей работы самих ОС в браузере сайт copy.sh [9].

 

Список литературы:

  1. https://xtermjs.org/
  2. https://unixhow.com/1789/onlajn-emulyatory-terminala-linux-i-redaktory-bash
  3. https://opensource.com/article/21/5/linux-terminal-multiplexer
  4. https://novnc.com/info.html
  5. https://habr.com/ru/post/326164/
  6. https://manpages.ubuntu.com/manpages/bionic/man1/broadwayd.1.html
  7. https://webassembly.org/
  8. https://github.com/appcypher/awesome-wasm-langs
  9. https://copy.sh/