I think it's obvious. You have to decide between speed and code complexity. They took speed so they went with C, even though we know that the code would be much simpler if they used Brainfuck instead, because it's syntactically much easier to process for humans since there are only 8 tokens to remember. Not just that, the compatibility aspect is a huge one too. Being written in C makes it easily to integrate into other languages (relative to something like Java for example). SQlite would be nowhere near as ubiquitous without that trait. C also contributes to SQLite's ubiquity by nature of virtually every platform having at least 1 C compiler. Any native language with the ability to export C-style functions (e.g. C++) can do that just as easily. Eh, you'd have to wrap everything in 'extern "C"' to use C linkage, which iirc means that you can't use some key language features like virtual functions. For the external API/wrapper at least. You can't use C++ features in the public interface in that case. Internally, you can use whatever you want. Picking C++ means you have to use 'extern "C"'. Picking C means you don't have classes, don't have builtin data types like string and map, don't have any form of automatic memory management, and are missing about a thousand other features. Most C++ libraries that expose a c interface have a shim. Just another layer of code to maintain and test. It's not like there are hash table libraries for C. Everyone just writes their own from scratch!