C Programming Resources

This post aims to list projects and resources written in the C programming language. It will attempt to breakdown the into functional components that are very useful in creating a project from scratch using Open source code.

Contents

Build Tools

Tools that automate the building and testing of projects in C.

  • CMake - Cross-platform family of tools designed to build, package and test software.
  • GNU Make - Tool which controls the generation of executables and other non-source files of a program.
  • Libtool - Generic library support script. Libtool hides the complexity of using shared libraries behind a consistent, portable interface.

Compilers

Compilers, as well as compiler- and compilation-related tooling.

  • Clang - Compiler for LLVM. Supports C11.
  • distcc - Program that allows builds to be distributed among several machines.
  • GCC - Provides a C compiler as part of its compiler set. Supports C11.

Compression

  • blosc - A high performance meta-compressor optimized for binary data. It has been designed to transmit data to the processor cache faster than the traditional, non-compressed, direct memory fetch approach via a memcpy OS call.
  • CRoaring - C implementation of Roaring bitmaps.
  • DENSITY - Super-fast compression library.
  • fast_zlib - Improved zlib, which runs 2 to 10 times faster.
  • huffandpuff - Minimal Huffman encoder and decoder.
  • libvbyte - A fast implementation for varbyte 32bit/64bit integer compression - see Upscaledb
  • lz4 - Library for an extremely fast compression algorithm.
  • StreamVByte - An integer compression technique that applies SIMD instructions (vectorization) to Google’s Group Varint approach.
  • TurboPFor - Fastest integer compression.
  • Zstandard - Fast, lossless compression algorithm, targeting real-time compression scenarios at zlib-level or better compression ratios.

Concurrency and Parallelism

  • Concurrency Kit - Concurrency primitives, safe memory reclamation mechanisms and non-blocking data structures for the research, design and implementation of high performance concurrent systems.
  • libhl - A fast C library implementing a thread-safe API to manage hash-tables, linked lists, lock-free ring buffers and queuesLibrary implementing a thread-safe API to manage a range of data.
  • liburcu - Userspace RCU (read-copy-update) library. This data synchronization library provides read-side access which scales linearly with the number of cores.
  • mill - Go-style concurrency that can execute up to 20 million coroutines and 50 million context switches per second.
  • pthreads- POSIX thread library.

Crypto

Mostly library implementations of well-known cryptographic algorithms or protocols.

  • GnuTLS - Secure communication library, implementing SSL, TLS and DTLS protocols.
  • OpenSSL - A full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library.
  • liboqs - Library for quantum-resistant cryptographicl algorithms.
  • libsodium - Modern and easy-to-use crypto library.
  • MIRACL - Cryptographic SDK: Multiprecision Integer and Rational Arithmetic Cryptographic Library is a library that is regarded as the gold standard open source SDK for elliptic curve cryptography (ECC).
  • s2n - C99 implementation of the TLS/SSL protocols, designed to be simple, fast and with security as a priority.
  • trezor-crypto - Heavily-optimized crypto algorithms for embedded devices.

Data Structures

  • C Algorithms - A collection of common data structures and algorithms.
  • Collections-C - Library of generic data structures.
  • libavl - Library containing a range of self-balancing binary trees.K
  • liblfds - Portable lock-free data structure library that are process, thread and interrupt safe, never sleep, operate without context switches, cannot fail, perform and scale literally orders of magnitude better than locking data structures.
  • libsrt - Soft and hard real-time data structures.
  • klib - Small and lightweight implementations of common algorithms and data structures.

Frameworks

The frameworks are libraries that provide data structures and other stuff you expect of a ‘modern’ standard library.

  • APR - Apache Portable Runtime; a highly portable library that is at the heart of Apache HTTP Server 2.x. APR has many uses, including access to advanced IO functionality (such as sendfile, epoll and OpenSSL), OS level functionality (random number generation, system status, etc), and native process handling (shared memory, NT pipes and Unix sockets).another library of cross-platform utility.
  • qlibc - Simple and powerful general purpose C/C++ library that includes all kinds of containers and general library routines.
  • libcoap - Implementation of the Constrained Application Protocol used to define Internet of Things (IoT).
  • libPhenom - Eventing framework for building high-scalability and high-performance systems. Uses Concurrency Kit.

  • libsvx - A pure C network library that uses the reactor pattern whereby callback functions can be executed when a specific event occurs.

  • rDSN - framework for quickly building robust distributed systems. It has a microkernel for pluggable components, including applications, distributed frameworks, devops tools, and local runtime/resource providers, enabling their independent development and seamless integration.

  • nuklear - A single-header ANSI C gui library.

  • TBOX - Multi-platform library with a large number of capabilities.

Memory Management

  • Lockless Memory Allocator - Efficient memory allocator using lock-free echniques to minimize latency and memory contention.
  • rpmalloc - Lock free thread caching, fast memory allocator, naturally aligned on 32-byte boundaries.

Serialization

  • binn - Binary serialization format, which is compact and fast.
  • cmp - Implementation of the MessagePack serialization protocol.
  • flatcc - Compiler and library for Google’s FlatBuffers
  • libavro] - Implementation of the Apache Avro data serialization system.
  • mpack - Implementation of the MessagePack serialization protocol.
  • OPIC - Object Persistence in C; Unlike traditional approaches which walk through the in-memory objects and write it to disk, OPIC itself is a memory allocator where all the objects created are backed by a memory mapped file.
  • protobuf-c - Implementation of Google Protocol Buffer.