Woxi: открытая реализация Wolfram Language на Rust
Woxi — открытая альтернатива Mathematica на Rust: без лицензий, без задержек запуска ядра, с поддержкой Jupyter и CLI-скриптинга.
Когда проприетарная математика стоит слишком дорого
Wolfram Mathematica — один из самых мощных инструментов для символьных вычислений, анализа данных и математического моделирования. Но у него есть серьёзный изъян: Mathematica — проприетарное программное обеспечение с высокой стоимостью лицензии, что существенно ограничивает её доступность для многих пользователей.
По состоянию на версию 14, в языке Wolfram Language насчитывается более 6 600 встроенных функций и символов. Это колоссальная экосистема. И именно её закрытость вдохновила разработчиков на создание Woxi — свободного переосмысления Wolfram Language, написанного на языке Rust.
Проект появился на платформе Hacker News (англоязычный агрегатор технических новостей и обсуждений) в разделе «Show HN» (рубрика «Покажи сообществу», где авторы представляют собственные разработки) и немедленно привлёк внимание исследователей, инженеров и разработчиков.
Woxi — это не просто клон. Это переосмысление: быстрее, свободнее, ближе к современным инструментам разработки.
Что такое Woxi и зачем он нужен
Woxi — это интерпретатор Wolfram Language с открытым исходным кодом, написанный на Rust, созданный как более быстрая альтернатива WolframScript без накладных расходов на запуск ядра и верификацию лицензии.
В отличие от Mathematica или проприетарного Wolfram Engine, Woxi полностью открыт (лицензия AGPL-3.0) и работает нативно — без overhead’а (накладных расходов) от запуска ядра и проверки лицензии.
Проект получил название Woxi, что расшифровывается как «Wolfram Oxidized» — намёк на окисление (oxidized) металла, отсылающее к экосистеме Rust (ржавчина). Репозиторий проекта доступен на платформе GitHub (крупнейший хостинг для совместной разработки кода с открытым исходным кодом).
Целевая аудитория проекта — разработчики, исследователи и преподаватели, использующие Wolfram Language для написания скриптов, анализа данных или обучения и желающие получить бесплатную и производительную альтернативу WolframScript или Mathematica.
Архитектура: почему Rust?
Woxi разработан на Rust — современном системном языке программирования, известном своей производительностью, безопасностью и возможностями конкурентного выполнения. Опираясь на возможности Rust, Woxi стремится предоставить надёжную платформу для математических вычислений и анализа данных.
Выбор Rust — не случаен. Главная боль пользователей WolframScript — это время запуска: каждый раз при вызове скрипта система должна поднять полноценное ядро Wolfram и верифицировать лицензию. Woxi работает быстрее WolframScript, поскольку не несёт накладных расходов на запуск ядра и проверку лицензии.
Основа на Rust обеспечивает эффективность и современную инструментальную базу, что привлекает тех, кто ищет открытую экосистему Wolfram.
graph LR
A[Wolfram Language\nскрипт / ноутбук] --> B[Woxi-интерпретатор\nна Rust]
B --> C{Интерфейс}
C --> D[CLI\nкомандная строка]
C --> E[Jupyter Notebook\nинтерактивный блокнот]
C --> F[Woxi Studio\nграфический интерфейс]
C --> G[Python-пакет\nwoxi-py]
C --> H[npm-пакет\nwoxi-wasm / WebAssembly]
Обратите внимание на архитектуру: один интерпретатор обслуживает сразу несколько интерфейсов — от командной строки (CLI, интерфейс ввода команд через терминал) до полноценного графического редактора.
Возможности Woxi: что уже работает
Интерфейсы и интеграции
Woxi поставляется с Woxi Studio — графическим интерфейсом в стиле Mathematica, построенным на библиотеке iced, но также доступен через командную строку (CLI), ядро Jupyter, пакет Python, пакет npm или модуль WebAssembly (WASM).
Woxi поддерживает написание CLI-скриптов, работу в REPL-режиме (интерактивная оболочка для ввода и немедленного выполнения команд) и Jupyter Notebooks с графическим выводом. Установка производится через Cargo (менеджер пакетов Rust), а экземпляр JupyterLite доступен для тестирования прямо в браузере.
Поддерживаемые функции
Можно запускать операции символьной математики, генерировать случайные данные, манипулировать строками и выполнять сложные математические преобразования, используя привычный синтаксис Wolfram.
Пример скрипта на Woxi (используется синтаксис, идентичный Wolfram Language):
#!/usr/bin/env woxi
(* Вычислить квадрат 5 случайных целых чисел от 1 до 9 *)
RandomInteger[{1, 9}, 5] // Map[#^2&] // Map[Print]
Здесь #!/usr/bin/env woxi — стандартная «шебанг»-строка Unix, позволяющая запускать файл напрямую из терминала без явного вызова интерпретатора.
Совместимость с оригиналом
Проект поддерживает совместимость, обеспечивая прохождение всех CLI-тестов как в Woxi, так и в WolframScript, что даёт уверенность в корректности результатов.
Браузерная среда
JupyterLite-экземпляр работает полностью автономно в браузере — никакие данные не передаются в облако. Это особенно важно для образовательных сред и корпоративных сетей с ограничениями на передачу данных.
Сравнение: Woxi vs Mathematica vs WolframScript
Посмотрим, как Woxi соотносится с проприетарными решениями Wolfram Research по ключевым параметрам:
| Параметр | Mathematica (Десктоп) | WolframScript (Командная строка) | Woxi |
|---|---|---|---|
| Лицензия | Проприетарная, платная | Проприетарная, бесплатно для ряда платформ | Открытая (AGPL-3.0), бесплатно |
| Язык реализации | C/C++, Java, Wolfram Language | C/C++, Wolfram Language | Rust |
| Запуск ядра | Медленный (секунды) | Медленный (секунды) | Мгновенный |
| CLI-скриптинг | Ограниченно | Да | Да |
| Jupyter Notebook | Через сторонний плагин | Через официальный плагин | Встроенная поддержка |
| Браузерный REPL | Только Wolfram Cloud (платно) | Нет | JupyterLite (бесплатно) |
| Покрытие функций | 6 600+ функций | 6 600+ функций | Подмножество |
| Исходный код | Закрытый | Закрытый | Открытый, аудируемый |
| Платформы | Windows, macOS, Linux | Windows, macOS, Linux | Windows, macOS, Linux, WebAssembly |
Таблица поддерживаемых категорий функций
Проект реализует подмножество функций Wolfram Language; файл functions.csv в репозитории отслеживает статус реализации каждой функции.
Ниже — примерное распределение функциональных категорий по степени поддержки в Woxi (на основе публично доступных данных проекта):
| Категория функций | Примеры | Статус поддержки |
|---|---|---|
| Арифметика и алгебра | Plus, Times, Power, Expand | ✅ Реализовано |
| Работа со строками | StringJoin, StringLength, StringReplace | ✅ Реализовано |
| Случайные числа | RandomInteger, RandomReal | ✅ Реализовано |
| Работа со списками | Map, Select, Table, Range | ✅ Реализовано |
| Символьное дифференцирование | D, Integrate | 🔄 Частично |
| Визуализация (графики) | Plot, ListPlot | 🔄 Частично |
| Решение уравнений | Solve, NSolve | 🔄 Частично |
| Машинное обучение | Classify, Predict | ❌ Не реализовано |
| Работа с базами данных | DatabaseConnect | ❌ Не реализовано |
functions.csv в репозитории проекта на платформе GitHub.Установка и начало работы
Способ 1: через Cargo (менеджер пакетов Rust)
Для сборки Woxi из исходников необходимо установить Rust. Его можно скачать с официального сайта rust-lang.org.
# Установить Rust (если ещё не установлен)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Клонировать репозиторий и установить
git clone https://github.com/ad-si/Woxi
cd Woxi
make install
Способ 2: готовые бинарные сборки
Каждый релиз на платформе GitHub включает архивы с утилитой командной строки woxi и редактором блокнотов Woxi Studio для Linux, macOS и Windows (архитектуры x86-64 и arm64), а также файл SHA256SUMS.txt для проверки целостности.
Установка на macOS: особенности
На macOS команда make install дополнительно собирает редактор блокнотов Woxi Studio и устанавливает его как .app-приложение по пути /Applications/Woxi Studio.app, регистрируя его в системе управления приложениями (Launch Services — служба macOS, отвечающая за ассоциации файлов), чтобы файлы .nb, .wl и .wls появлялись в меню «Открыть с помощью…» файлового менеджера Finder (встроенный файловый менеджер macOS).
Сборка Woxi Studio для macOS поставляется как .app-бандл. Приложение не подписано нотариально (Apple Notarization — процедура проверки безопасности приложений от Apple), поэтому macOS помещает его в карантин после загрузки — необходимо снять этот флаг один раз после распаковки.
Способ 3: npm-пакет (WebAssembly)
Woxi также доступен на платформе npm (реестр пакетов для JavaScript) под именем woxi-wasm — как сборка WebAssembly (технология запуска кода в браузере с близкой к нативной скоростью) с привязками для JavaScript.
npm install woxi-wasm
Работа через командную строку (CLI)
# Запустить интерактивную оболочку (REPL)
woxi
# Выполнить скрипт
woxi my_script.wl
# Прямое вычисление выражения
woxi -e 'Map[#^2&, Range[10]]'
Подключение ядра к Jupyter (интерактивным блокнотам)
# Установить ядро Woxi для Jupyter
woxi --install-jupyter-kernel
# Запустить Jupyter Notebook
jupyter notebook
# Далее выбрать ядро «Woxi» при создании нового блокнота
Критика сообщества и архитектурные вопросы
Как и любой амбициозный открытый проект, Woxi столкнулся с конструктивной критикой на Hacker News.
Ряд участников указывает на архитектурную проблему: в кодовой базе такие вещи, как полиномы, реализованы в коде на Rust, а не на самом языке Woxi. Правильный подход, по их мнению, — иметь минимальный интерпретатор с возможным JIT-компилятором (технология компиляции «точно в срок», ускоряющая выполнение кода), а затем реализовать всю функциональность на самом языке Woxi в виде правил переписывания термов.
Это классическая дилемма при реализации языков: встраивать ли функциональность в хост-язык (Rust) или реализовывать её средствами самого интерпретируемого языка. Первый подход — быстрее на старте, второй — более масштабируем в долгосрочной перспективе.
Для кого подходит Woxi
Проект сфокусирован на поддержке написания CLI-скриптов и работы с Jupyter-блокнотами, что делает его практичным для повседневного использования.
Woxi особенно полезен в следующих сценариях:
- Автоматизация и DevOps — встраивание Wolfram-скриптов в пайплайны сборки и непрерывной интеграции (CI/CD — практика автоматической сборки, тестирования и деплоя кода) без необходимости держать лицензированный Wolfram Engine
- Образование — преподаватели могут давать студентам задания на Wolfram Language без дорогостоящих лицензий
- Исследования с открытым кодом — воспроизводимые вычисления в Jupyter-блокнотах без привязки к проприетарному бэкенду
- Разработка на Python/JavaScript — интеграция Wolfram-синтаксиса в существующие проекты через Python-пакет или WebAssembly-модуль
Высокие лицензионные затраты Mathematica делают её недоступной для многих независимых пользователей, преподавателей и проектов с открытым исходным кодом. Woxi устраняет именно этот барьер.
Заключение: шаг к свободной математике
Woxi — амбициозный проект, бросающий вызов многолетней монополии Wolfram Research в нише символьных вычислений. Если вы ищете возможность использовать функции Wolfram Language без ограничений и затрат проприетарной Mathematica, Woxi — это развивающийся интерпретатор с открытым исходным кодом, заслуживающий серьёзного внимания. Построенный на Rust и ориентированный как на CLI-скриптинг, так и на работу с Jupyter-блокнотами, Woxi обеспечивает быстрый, свободный от лицензий подмножественный набор функций Wolfram Language.
Проект не претендует на полную замену Mathematica прямо сейчас — он реализует подмножество языка. Но он уже достаточно функционален для реальных задач: автоматизации, обучения, анализа данных и исследований. А открытая архитектура и лицензия AGPL-3.0 означают, что любой желающий может внести свой вклад и ускорить развитие проекта.
Открытый исходный код и математика — естественные союзники. Woxi делает этот союз чуть крепче.
Ссылки по теме:
- Репозиторий проекта: github.com/ad-si/Woxi
- Официальная документация: woxi.ad-si.com/docs
- Онлайн-демо в браузере (JupyterLite): woxi.ad-si.com