- Run Linux from Web Browser with these 9 Websites
- JSLinux
- Copy.sh
- Webminal
- DistroTest
- CoCalc
- Geekflare Compiler
- WebVM
- JS/UNIX Terminal
- CB.VU
- Рабочий стол Linux в браузере
- Запуск Unix-процессов внутри браузера
- ▍ Компоненты Browsix
- Зачем это нужно?
- ▍ Примеры
- Консоль в браузере
- Десктоп на JavaScript
- Браузер — это операционная система
Run Linux from Web Browser with these 9 Websites
Invicti Web Application Security Scanner – the only solution that delivers automatic verification of vulnerabilities with Proof-Based Scanning™.
Well, I can understand if you are new and want to play around, learn or want a test drive. Or maybe just bored with Windows and MAC.
The following tools will help you launch Linux-based OS within a browser.
The good thing about that emulator is you don’t have to install anything on your PC. It works within your web browser as you are surfing any website.
JSLinux
JSLinux is fully functional Linux running entirely in a web browser, meaning if you have almost any modern web browser suddenly you can run a basic version of Linux on any computer.
This emulator is written in JavaScript and supported on Chrome, Firefox, Opera, and Internet Explorer. You can refer to the official technical notes about this fantastic emulator.
Copy.sh
Run Linux 2.6 from copy.sh. Boot time for Linux is less than one minute, and you may launch other following operating systems too.
- Windows 98
- Arch Linux
- KolibriOS
- Linux 2.6 and 3.18
- Windows 1.01
- FreeDOS
- OpenBSD
- Solar OS
Webminal
Webminal is GNU/Linux terminal and the best place to practice the Linux commands and interact with other users. To access the Webminal terminal, you need to register a free account with them.
Webminal has helped students from more than 125 countries that have practiced more than 1.5 million commands.
DistroTest
DistroTest allows you to test any operating system directly without installing any application or software. Use every function you want from the system to test installed programs, install and uninstall software, and format or delete the system files or hard disks with ease.
You are free to choose from various operations from the alphabet and the numbers you can see. Start running Linux from the Web Browser to test it. Not to mention, DistroTest hosts more than 350 operating systems.
CoCalc
CoCalc offers real-time, collaborative, and fully synchronized Linux Terminal in the browser. It will help you in maintaining software without installing it. You can leverage the benefit of using the same terminal so multiple users can open it. Additionally, it allows you to edit the shell script files and run them effortlessly.
CoCalc provides a side-chat that allows you to discuss the commands with others. In addition, automatic backup helps to keep the files safe. You can also copy or paste between the online terminal and your local PC.
CoCalc has a frame editor that supports script file editing with a terminal side by side. It includes many popular applications like Git, Emacs, GitHub, and VIM and supports programming shells such as R shell, IPython, and SageMath. It also supports programming languages and powerful compilers, including Python, Java, C, and C++ through GNU GCC or Ada, Clang, Haskell, Rust, Smalltalk, and more.
This Linux terminal is ideal for learning or teaching Linux. CoCalc’s servers enable everything to run remotely, and you don’t need to worry about complexities, handle setup or installation issues, or take risks of corrupting your files upon making minor mistakes. Moreover, you will always get snapshots of your files that you can restore and copy in case of file corruption or mismanagement to ensure you don’t lose anything.
Geekflare Compiler
Not exactly the entire OS but you can practice bash commands on Geekflare Bash Complier.
WebVM
You can use WebVM to run client-side Debian binaries right from your web browser. It is powered by the CheerpX virtualization engine.
The core components involve:
- A CheerpX execution engine,
- Xterm.js as the primary UI module,
- A Debian buster disk image with a few pre-installed packages.
This has no server-side components, and you would basically be accessing disk images held on a Content Delivery Network like Cloudflare. This approach essentially means many simultaneous users without any technical bottlenecks.
JS/UNIX Terminal
JS/UNIX is UNIX-like Operating System for web browsers written in JavaScript. It doesn’t require any plugin to open the terminal. You get a “guest” login to practice the commands.
CB.VU
CB.VU gives you FreeBSD 7.1 stable version.
If you are looking to build your career in Linux, then you may check out this online course by Jason Cannon.
Рабочий стол Linux в браузере
Первый в мире браузер (1993 года) выполнял две функции:
- рендеринг HTML;
- переход по гиперссылкам (навигация, браузинг — отсюда и название «браузер»).
Современный браузер эволюционировал в сложнейшую мета-систему, которая по объёму кода превосходит ядра многих ОС. Более того, браузер де-факто может работать как операционная система. И не только в Linux-виртуалке (как ChromeOS), но как реальная платформа для запуска настоящих приложений, в том числе нативных программ на C, C++, Go и Node.js.
Запуск Unix-процессов внутри браузера
Для доказательства этой концепции был разработан экспериментальный проект Browsix. Мотивы создания Browsix и архитектура системы описаны в научной статье (doi: 10.1145/3037697.3037727). Очень странно, но этот уникальный проект 2017 года ни разу не упомянут на Хабре.
Если в двух словах, Browsix запускает оригинальные, немодифицированные программы C, C++, Go и Node.js в браузере клиента как процессы Web Workers в окружении POSIX, работающие параллельно друг с другом и с основным браузерным потоком, который рендерит страницы.
Browsix перехватывает системные вызовы и обеспечивает программам доступ к стандартным сервисам ОС, таким как общая файловая система и процессы. Есть также ограниченная поддержка синхронного I/O и сокетов TCP/IP.
В отличие от интерпретаторов типа Cygwin, сам Browsix не выполняет интерпретацию кода. Он предоставляет общее ядро и примитивы вроде системных вызовов для существующих интерпретаторов и режимов выполнения, ориентированных на JavaScript.
Основные модули Browsix написаны на TypeScript (первые три строки в таблице).
▍ Компоненты Browsix
Компонент | Строк кода |
---|---|
Ядро | 2249 |
Модификации BrowserFS | 1231 |
Общий модуль syscall | 421 |
Интеграция с Emscripten (поддержка С/С++) | 1557 |
Интеграция с GopherJS (поддержка Go) | 926 |
Интеграция с Node.js | 1742 |
Всего | 8126 |
Например, разработчики расширили компиляторы GopherJS и Emscripten, чтобы они могли работать с их общим ядром, так что процессы, написанные на C и Go, могут работать параллельно (в отдельных веб-воркерах) и взаимодействовать через каналы, сокеты и файловую систему в браузере (как в стандартной среде Unix).
Зачем это нужно?
В современной концепции разработки интерактивные веб-приложения обычно разделяются на серверную и клиентскую части:
Вместо того чтобы поддерживать серверную часть приложения из существующих Unix-программ, разработчик просто переносит их в браузер клиента. Кроме всего прочего, это устраняет целый класс проблем безопасности (программы явно будут иметь доступ только к данным текущего пользователя на вкладке браузера) и масштабирования.
▍ Примеры
Посмотрим на примеры приложений, которые работают внутри Browsix.
- Терминал даёт доступ к внутренностям Browsix через стандартную консоль POSIX (по крайней мере, так было задумано, в реальности многое сейчас не работает):
(скриншот с офсайта)
Сейчас редактор запускается не во всех браузерах (у нас не загрузилось в Firefox Nightly 105.0a1 и Chrome 104.0.5112.81). Но по старым скриншотам видно, что его функциональность сравнима с коммерческими веб-редакторов LaTeX, таких как Overleaf:
Overleaf
Теоретически, в Browsix можно загрузить любую программу. Хотя разработчики давно не обновляли движок и он сейчас немного глючит. Но это эксперимент, который демонстрирует, что запуск произвольных бинарников в принципе возможен.
Консоль в браузере
Терминал Browsix — не единственная реализация консоли Unix в браузере. Из известных разработок вспоминается утилита GoTTY, которая отправляет выдачу консоли в браузер клиента:
А если объединить этот инструмент с эмулятором операционной системы в браузере, то получается нечто такое.
Десктоп на JavaScript
JavaScript позволяет реализовать в браузере вполне правдоподобное десктопное окружение. Это отличная демонстрация современных веб-технологий. Хотя понятно, что JS работает на порядок медленнее, чем любой нативный код.
Если развернуть на весь экран и пощёлкать по иконкам, то создаётся смутное впечатление обычного десктопа Windows, только на очень старом железе (из-за больших лагов). А так тут есть меню «Пуск», папки, рабочий софт, игры.
Ещё один похожий проект — Puter, тоже сделанный за год одним человеком. Только здесь GUI рабочего стола больше напоминает macOS или Linux, и кажется немного симпатичнее. Создаётся ощущение, что здесь лаги поменьше. Например, изменение размера окон и перемещение их по экрану вообще не тормозит. Правда, встроенный набор приложений гораздо более скудный. Ни игр, ни другого софта, только консоль.
В отличие от разработчиков консоли Browsix, здесь автор реально принимает баги, извиняется и исправляет ошибки. Десктоп нормально работает во всех основных браузерах последних версий.
Браузер — это операционная система
Примеры создания полноценных десктопных окружений внутри браузера демонстрируют в том числе невероятную сложность современного браузера. То есть браузер — это альтернативная (универсальная) платформа для разработки приложений. Там можно реализовать все функции нативных программ Linux, Windows или macOS.
В принципе, в браузере можно запустить эмулятор конкретной операционной системы — и уже в нём запускать все нативные программы, в том числе другие браузеры, а в них другие операционные системы и так далее. Как шутят на реддите, главное — не гуглить Google, запустив браузер внутри браузера, и не вешать чужие терминалы командой rm -rf / .
Ещё в далёком 2012 году JSLinux от Фабриса Беллара стал первым эмулятором, способным загружать в браузер произвольные операционные системы. Он изначально поддерживал следующие ОС:
CPU | ОС | Интерфейс | Доступ к VFsync | Ссылка на загрузку | Конфигурация TEMU | Комментарий автора |
---|---|---|---|---|---|---|
x86 | Alpine Linux 3.12.0 | Консоль | Да | нажмите здесь | url | |
x86 | Alpine Linux 3.12.0 | X Window | Да | нажмите здесь | url | Правая кнопка мыши вызывает меню. |
x86 | Windows 2000 | Graphical | Нет | нажмите здесь | url | Дисклеймер о снятии ответственности |
x86 | FreeDOS | Текстовый VGA | Нет | нажмите здесь | url | |
riscv64 | Buildroot (Linux) | Консоль | Да | нажмите здесь | url | |
riscv64 | Buildroot (Linux) | X Window | Да | нажмите здесь | url | Правая кнопка мыши вызывает меню. |
riscv64 | Fedora 33 (Linux) | Консоль | Да | нажмите здесь | url | Предупреждение: долгое время загрузки. |
riscv64 | Fedora 33 (Linux) | X Window | Да | нажмите здесь | url | Предупреждение: долгое время загрузки. Правая кнопка мыши вызывает меню. |
Более современная версия этого эмулятора — виртуальный x86, на который можно загрузить 25 разных операционных систем, включая Arch Linux и Damn Small Linux. Всё это работает чисто в браузере.
Для удалённого управления другим компьютером тоже не требуется ничего, кроме браузера — см. Apache Guacamole, который поддерживает все стандартные протоколы типа VNC, RDP и SSH.
В принципе, через Guacamole можно управлять «настольными компьютерами», которые физически даже не существуют, а живут в облаке или в контейнере на каком-нибудь хостинге, то есть виртуальными системами.
Кстати, из этой невероятной функциональности современного браузерного движка следует вывод, что разработать с нуля ещё одну махину, сравнимую с Chromium, очень трудно. И если исчезнет единственный на платформе x86 альтернативный движок Gecko (Firefox, FirefoxOS), то уже никто не сможет составить ему конкуренцию.
Ну а по сути современный браузер — уже сам по себе операционная система. Программы любой сложности при желании можно переписать на WebAssembly, asm.js или скомпилировать в JavaScript — и они будут работать в браузере.