Разработчики языка Red добавили в его тулчейн поддержку статической линковки C-библиотек. Это позволяет собрать один исполняемый файл, в который упакованы все зависимости, — никаких дополнительных DLL, настройки PATH или установщиков. Работа проделана большая: статический линкер читает объектные форматы COFF, ELF и Mach-O, выдёргивает из архивов только нужные файлы, сворачивает дублирующиеся секции (COMDAT и weak-символы), разрешает системные символы и руками прописывает релокации. Пока линковка работает только для 32-битного кода (Red/System пока генерирует 32-битные объекты). Поддерживаются Windows x86 (.obj/.lib), Linux x86 (.o/.a), Linux ARM (включая Raspberry Pi, с Thumb-2) и macOS Intel (Mach-O).
Механика простая. Чтобы подключить библиотеку, в коде пишут её название без расширения — например, miniz. По умолчанию тулчейн ищет динамическую версию (miniz.dll или libminiz.so). Но стоит добавить флаг -s (или --static) при компиляции — и тот же miniz начнёт резолвиться в статическую библиотеку (miniz.lib на Windows, libminiz.a на Linux). Один и тот же исходник, одна лишняя опция. Если нужен смешанный режим, можно явно указать расширение (.dll, .lib, .a) — тогда флаг -s на такой импорт не действует. Старый код с явными .dll/.so/.dylib продолжает работать без изменений.
В качестве реального примера авторы выпустили CherryTracker — плеер модулей (MOD) старой школы. Он написан на Red, использует Draw-интерфейс и прослойку Red/System для работы с libxmp (декодирование форматов) и SDL3 (аудио). В репозитории лежат 32-битные статические версии этих библиотек для Windows и Linux. Для быстрой разработки авторы компилировали с общими библиотеками, а для релизов переключались на статику флагом -r -s. CherryTracker доступен на GitHub, бинарники подписаны личным сертификатом.
Под капотом — полноценный линкер, а не простая склейка байтов. Он умеет выборочно загружать объекты из архивов: если библиотека содержит сотню файлов, в исполняемый файл попадёт только то, что реально используется. Системные символы (libc, libSystem, встроенные интринсики вроде 64-битного деления) резолвятся автоматически. Полная поддержка C++ runtime (исключения, RTTI, std::) отложена на потом — пока фокус на чистом C. Пропуск отладочной информации и инкрементальная линковка тоже в планах.