На Хабре рассказывали про «чак норрисов» от программирования, таких как Линус Торвальдс, Фабрис Беллар и Джефф Дин. Конечно, есть и другие феноменальные таланты, их много. Зачастую эти люди далеки от публичности, никогда не давали интервью и известны только по никам. Но их объединяет одно — выдающиеся индивидуальные разработки, которые разрывают шаблон и выделяются из общей массы.
Мы собирали этот список несколько лет. Начнём с последних строчек своебразного хит-парада… Знакомьтесь — Джастин Танни (Justine Tunney), хакерша и гений системного программирования.
Перечислим некоторые проекты Танни.
▍ Redbean
Наверное, самая известная её разработка — переносимый веб-сервер Redbean, который распространяется в виде единого кросс-платформенного файла вместе с содержимым сайта. О нём уже упоминали на Хабре.
Идея в том, что вы можете взять веб-сервер и внедрить внутрь бинарника свои статические файлы .html
и .lua
с помощью команды zip
. В результате получится файл redbean.com
, который нативно запускается под шестью операционными системами: Linux, Mac, Windows, FreeBSD, OpenBSD и NetBSD. То есть этот веб-сервер запустится практически на любом компьютере.
Сервер со встроенными Lua, SQLite и MbedTLS сервер в бенчмарках показывает примерно 1,1 млн запросов в секунду на обычном ПК (в 2,5 раза больше, чем nginx):
# Note: Benchmarked on an Intel® Core™ i9-9900 CPU # Note: Use redbean-demo.com -s $ wrk --latency -t 10000 -c 10000 -H 'Accept-Encoding: gzip' http://127.0.0.1:8080/tool/net/demo/index.html Running 10s test @ http://127.0.0.1:8080/tool/net/demo/index.html 10000 threads and 10000 connections Thread Stats Avg Stdev Max +/- Stdev Latency 10.44ms 46.76ms 1.76s 98.41% Req/Sec 189.08 259.45 39.10k 98.67% Latency Distribution 50% 5.68ms 75% 6.87ms 90% 8.77ms 99% 197.91ms 4327728 requests in 3.72s, 3.37GB read Socket errors: connect 0, read 5, write 0, timeout 2 Requests/sec: 1163062.91 Transfer/sec: 0.90GB
В сервер встроена простая консоль bestline с автодополнением кода и UNIX-модуль с низкоуровневым интерфейсом для системных вызовов и прямым доступом к интерфейсу библиотеки Cosmopolitan (о ней ниже).
Джастин презентовала Redbean на HN в феврале 2021 года — и тот сразу запрыгнул на третье место в рейтинге самых высоко оценённых любительских проектов в категории 'Show HN' за всю историю, уступив только самодельной игровой приставке в стиле 80-х и фейковому голосованию из-за бага в движке HN.
В июне 2022 года вышла вторая версия сервера. За прошедший год Redbean 2.0 обзавёлся несколькими полезными встроенным функциями: песочница через pledge () (о ней ниже), геолокация IP-адресов, хеширование паролей argon2. Реализованы простые API с понятным синтаксисом, а также внутрь сервера добавлен фреймворк Fullmoon.
После всех масштабных расширений размер исполняемого файла redbean-tiny-2.0.16.com разбух до 1,4 МБ, но Джастин старается держать процесс под контролем.
Благодаря встроенной Unix-консоли, можно запускать интерфейс Unix под Windows — работают подсказки по двойному нажатию tab
, как в bash, и клавиатурные сочетания emacs.
Сервер отлично зарекомендовал себя в продакшне: он хостит все сайты Джастин, включая justine.lol, без использования ненужных прокси типа nginx — это цельная вертикальная платформа в одном файле.
▍ Кросс-платформенный формат APE
Работа веб-сервера Redbean стала возможна благодаря уникальному кросс-платформенному формату αcτµαlly pδrταblε εxεcµταblε (APE), который разработала Джастин.
Однажды она обнаружила, что файлы Windows Portable Executable можно закодировать как шелл-скрипты UNIX Sixth Edition благодаря тому, что оболочка Томпсона, первая командная оболочка UNIX, не использовала шебанг (#!). То есть можно слить воедино бинарные нативные форматы Windows, Unix и MacOS — и запускать высокопроизводительный нативный код Си на всех платформах из одного файла.
MZqFpD='
BIOS BOOT SECTOR'
exec 7<> $(command -v $0)
printf '177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7
exec "$0" "$@"
exec qemu-x86_64 "$0" "$@"
exit 1
REAL MODE...
ELF SEGMENTS...
OPENBSD NOTE...
NETBSD NOTE...
MACHO HEADERS...
CODE AND DATA...
ZIP DIRECTORY...
▍ Библиотека Cosmopolitan
На базе формата APE основана библиотека Cosmopolitan, которая позволяет компилировать универсальные кросс-платформенные бинарники средствами стандартного компилятора GCC.
Таким образом, программа, написанная на языке Си и скомпилированная GCC с помощью Cosmopolitan в файл с расширением .com
, будет нативно запускаться на любом дистрибутиве Linux, а также на macOS, Windows, FreeBSD, OpenBSD и NetBSD.
# create simple c program on command line
printf %s '
main() {
printf("hello worldn");
}
' >hello.c
# run gcc compiler in freestanding mode
gcc -g -Os -static -fno-pie -no-pie -nostdlib -nostdinc
-fno-omit-frame-pointer -pg -mnop-mcount -mno-tls-direct-seg-refs
-o hello.com.dbg hello.c -Wl,--gc-sections -fuse-ld=bfd
-Wl,-T,ape.lds -include cosmopolitan.h crt.o ape.o cosmopolitan.a
objcopy -S -O binary hello.com.dbg hello.com
# NOTE: scp it to windows/mac/etc. *before* you run it!
# ~40kb static binary (can be ~16kb w/ MODE=tiny)
./hello.com
В принципе, такая программа будет работать даже на голом железе вообще без операционной системы — если напрямую загрузить её в память с помощью загрузчика APE Loader, который тоже написала Джастин.
▍ Другие её проекты
- Blinkenlights. Отладчик командной строки, ориентированный на визуализацию того, как программы изменяют память. Эмулирует статически связанные программы i8086 и x86_64-pc-linux-gnu на платформах Linux, Mac, Windows, FreeBSD, NetBSD и OpenBSD.
- Apelife. Игра «Жизнь» Конвея на APE занимает чуть больше 1000 строчек кода. Это маленькая демонстрация библиотеки Cosmopolitan и консольных интерфейсов (TUI):
- Memzoom. Просмотр/мониторинг памяти процессов/файлов непосредственно в консоли как UTF-8. Похожа на команду
less
, только для бинарных данных и с обновлением результата в реальном времени. Поддерживается зум колёсиком мышки и несколько порядков отображения памяти: линейный порядок (слева направо), по кривой Гильберта и по кривой Мортона (Z-порядок). - Sectorlisp. 512-байтная реализация интерпретатора Лиспа, которая помещается в загрузочный сектор. По своей лаконичности Лисп называют программным аналогом уравнений Максвелла, и здесь он принимает максимально лаконичный вид: один сектор.
- Printvideo. Утилита командной строки для визуализации видеороликов в текстовом режиме консоли.
- Printimage. Утилита командной строки (на основе Hiptext) для отображения изображений png/jpg/gif в консоли.
- Braille Dump. Прямая замена
hexdump -C
, только с применением шрифта Брайля в Юникоде для отображения шестнадцатеричных кодов 0x81...0xff, тем самым улучшая читаемость двоичного кода. Работает на Linux 2.6.16+, Windows Vista+, MacOS XNU 15.6+, FreeBSD 12+, OpenBSD 6.4+, or NetBSD 9.1+.$ curl https://justine.lol/braille/bd.com >bd.com $ chmod +x bd.com $ echo 'hello→world→' | ./bd.com 00000000 68 65 6c 6c 6f e2 86 92 77 6f 72 6c 64 e2 86 92 │hello⢚⢠⢁world⢚⢠⢁│ 00000010 0a │◙│ 00000011
- Nesemu1. Эмулятор игровой приставки NES в консоли.
- Gosip. Библиотека на Go, которая реализует полный стек протоколов SIP/RTP на бэкенде для голосовой связи через телефонные гейты вроде Flowroute. Это простая и удобная альтернатива расширениям Asterix и фреймворкам типа Adhearsion поверх него, которые добавляют лишние слои абстракции, делая приложения телефонной связи тяжеловесными и сложными в обслуживании.
- RDE (registry data escrow). Депонирование доменов верхнего уровня на определённый момент времени.
- java-storage-nio. Java-клиент для файловой системы Google Cloud Storage, в документации описана как библиотека Java 7 nio FileSystem.
- Closure Rules. Абстрактный фреймворк (набор правил) для сборки проектов в системе Bazel, которую вместе с другими инструментами Closure Tools использовала компания Google для управления своими репозиториями с петабайтами кода.
Как видим, некоторые проекты лежат в корпоративном репозитории Google, где раньше работала Танни.
▍ Чем занимается сейчас
В 2011 году Джастин ещё последние месяцы работала в Google и совместно с друзьями снимала квартирку на Ист-Сайде (Манхэттен), словно из сериала «Друзья», но вскоре ушла с корпоративной работы, чтобы уделять время более интересным проектам и игре в WoW.
Сейчас девушка работает над разными проектами, в том числе допиливает портированную версию OpenBSD pledge() для Linux. По её мнению, сообщество OpenBSD понемножку вымирает, в то время как у этой операционной системы есть ряд безусловных достоинств, в том числе уникальные функции безопасности. Некоторые из них хотелось бы перенести в Linux, в том числе более логичное и чёткое управление привилегиями безопасности, что и делает pledge()
. Изначально эта функция писалась для реализации песочницы в веб-сервере Redbean, но она оказалась достаточно надёжным решением и как отдельная утилита.
Очевидно, девушка чрезвычайно талантливая. Интересно посмотреть, как у неё всё сложится в жизни.
Автор: Анатолий Ализар