Когда проприетарная математика стоит слишком дорого

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.

ℹ Быстрый факт
По данным репозитория на платформе GitHub, Woxi набрал более 594 звёзд. Проект активно развивается и принимает вклад от сообщества.

Архитектура: почему 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 доступен в браузерном экземпляре JupyterLite по адресу woxi.ad-si.com — никакой установки не требуется. Просто откройте страницу и начните вводить код на Wolfram Language прямо в браузере.

Сравнение: Woxi vs Mathematica vs WolframScript

Посмотрим, как Woxi соотносится с проприетарными решениями Wolfram Research по ключевым параметрам:

ПараметрMathematica (Десктоп)WolframScript (Командная строка)Woxi
ЛицензияПроприетарная, платнаяПроприетарная, бесплатно для ряда платформОткрытая (AGPL-3.0), бесплатно
Язык реализацииC/C++, Java, Wolfram LanguageC/C++, Wolfram LanguageRust
Запуск ядраМедленный (секунды)Медленный (секунды)Мгновенный
CLI-скриптингОграниченноДаДа
Jupyter NotebookЧерез сторонний плагинЧерез официальный плагинВстроенная поддержка
Браузерный REPLТолько Wolfram Cloud (платно)НетJupyterLite (бесплатно)
Покрытие функций6 600+ функций6 600+ функцийПодмножество
Исходный кодЗакрытыйЗакрытыйОткрытый, аудируемый
ПлатформыWindows, macOS, LinuxWindows, macOS, LinuxWindows, 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❌ Не реализовано
⚠ Важно знать
Woxi реализует подмножество Wolfram Language. Если ваши скрипты используют специализированные функции (машинное обучение, работа с базами данных, 3D-графика), перед миграцией сверьтесь с файлом 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) или реализовывать её средствами самого интерпретируемого языка. Первый подход — быстрее на старте, второй — более масштабируем в долгосрочной перспективе.

📝 Пример из истории
Аналогичный путь прошли CPython (реализация Python) и самосам Wolfram Language: базовые операции реализованы на C/C++ для скорости, а большая часть стандартной библиотеки — на самом языке. Woxi сейчас находится на ранней стадии этого пути.

Для кого подходит 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 делает этот союз чуть крепче.

Ссылки по теме: