Scalable C

“We use C most often to write libraries, which we then call from applications in other languages. This layer of C libraries sits between the operating system and the application.

This layer provides security, user interfaces, audio and video, maths, graphics, databases, communications, compression, and so on. I call this the “fabric layer.”

For the most part, this fabric layer sees the world as a single processor. It has no concept of concurrency. It cannot take advantage of many cores on a machine, let alone many machines in a cloud. Every library has its own style, standards, and API model. Every library has a custom build process.

A scalable technology can solve large problems as well as small ones. Our current fabric layer is not scalable. It costs too much to write and to use.

What I will explain in this book is how to build a scalable fabric layer, written in “Scalable C.”

Scalable C has specific properties:

  • It is cheap to create a Scalable C project.

  • It is cheap to use, with consistent and obvious APIs.

  • It is cheap to deploy, with powerful tools and packagers.

  • It is cheap to scale to many cores, with actor-based concurrency.

  • It is cheap to scale to many servers, with clustering across a cloud or data center.

  • It is cheap to build community, with a modern collaborative process.

Scalable C is standard portable C plus a mix of other technologies:

  • The CLASS RFC defines the Scalable C language style.

  • ZeroMQ provides message passing between threads and processes.

  • CZMQ provides a core C library for Scalable C.

  • Zyre provides local-area clustering for Scalable C projects.

  • zproject provides packaging (builds, bindings, and distributions).

  • zproto provides client-server meta-programming.

  • The C4.1 RFC defines a collaborative process for scalability.