Проект lib0xc представляет собой набор C-API, предназначенных для повышения надежности системной разработки без полной смены языка программирования. Хотя C нельзя сделать полностью безопасным на уровне типов и границ, этот набор утилит позволяет сделать преобладающие практики использования значительно безопаснее, чем сегодня. Цель — предоставить проекты возможность включать максимально возможное количество предупреждений компилятора и останавливать сборку, если код вводит новые ошибки. API намеренно именуется так, чтобы выглядеть как функции стандартной библиотеки, которые они заменяют, обеспечивая drop-in реплейсмент там, где это уместно. Большинство функций не предполагают наличия распределителя памяти, за исключением специализированных инструментов для аллокации, и ориентированы на структуры фиксированного размера, требуя наличия информации о размере аргументов в период компиляции. Для реализации этого подхода библиотека активно использует препроцессор C, полагаясь на макросы, так как ограничение кода на фиксированные объекты делает язык в целом безопаснее. Интерфейс полностью поддерживает расширения границ безопасности clang, используя макросы, которые безопасно расширяются в пустоту для указания границ памяти, что обеспечивает совместимость с существующим кодом. Многие представленные API существовали в разных отраслевых формах уже десятки лет; проект не претендует на оригинальное изобретение этих идей, а стремится предоставить хорошо задокументированные и протестированные кодифицированные представления этих паттернов. Паттерны, охватываемые API lib0xc, должны иметь обширную «ловушку успеха», то есть быть проще для корректного использования, чем для неправильного. Лишности языка C часто проистекают из плохо спроектированных контрактов API, и в таких местах lib0xc предлагает продуманные замены.
Библиотека предлагает модули стандартной библиотеки, включая alloc.h для типизированной аллокации с автоматическим очисткой, context.h для проверенных по границам указателей на контекст, pointer.h для макросов clang-fbounds-safety, string.h со статическими вариантами функций строк, а также int.h для безопасных преобразований целых чисел. В разделе системных утилит присутствуют buff.h для буферов с ограниченной емкостью, log.h для объектно-ориентированного логирования с упрощенными уровнями, hash.h на основе BSD queue.h, digest.h для объектов хэшей, errno.h для POSIX утилит ошибок, exit.h для отображения кодов sysexits, linker_set.h для единого ограниченного по безопасности набора линкера для ELF и Mach-O, а также unit.h для набора тестов с автообнаружением через линкерные наборы. Примеры использования демонстрируют bounds-tracked форматирование с CURSOR, где остаточное пространство отслеживается автоматически, проверку размеров при импорте контекста и падение работы при переполнении вместо тихого усечения. Поддерживаются спецификаторы формата portable printf, избавляющие от необходимости в PRIu32/PRIu64. Библиотека работает с C11 и расширениями GNU, рекомендован компилятор clang для поддержки границ безопасности. Она поддерживается на macOS и Linux архитектурых arm64 и x86_64. Сборка статической библиотеки производится в build/public/lib0xc.a. Тестовый набор организован по модулям с использованием sys/unit.h для регистрации и sys/check.h для утверждений тестовых случаев. Структура проекта включает portable source, тесты, платформу POSIX и собственные заголовки. Для адаптации к новым средам требуется предоставить реализацию __waiting_for_memory, panic-функции, типы буферов для целевой платформы, а также заголовок платформы с параметрами конфигурации, такими как ZX_WALLOC_LIMIT и ZX_LOG_LEVEL. Проект принимает вклад и следует Microsoft Open Source Code of Conduct, лицензии MIT и политикам по использованию товарных знаков.