Low level systems programming is horrid!
I have a clean high-level design for a new kind of web server framework. PostgreSQL, my favorite RDBMS, plays a major part in it. One of the reasons I chose PostgreSQL is because of its unusually extensible design. And I've just spent several days implementing a very simple extension. I'm pleased I've done it. I'm appalled at how much time its taken for such a small thing.
Part of the problem is a low level programming model. Part of the problem is sketchy documentation. Both of these things are normal for systems programming. It is bad enough when I'm programming to an API for a procedural system, but RDBMSs are relational. They are supposed to be paragons of clean, well-typed declarative programming.
As soon as one strays from the most basic SQL code the type system begins to break down. Domains are only partially type-checked. Reference checks do not automatically work for inherited types nor for array types. Many common operations can't be done with SQL functions, so must be written in a sequential procedural language opaque to the query optimizer and even more weakly typechecked. New types must be at least partially implemented in C, with a poory documented low level API. Outside of SQL, none of these APIs are relational!
I've overcome all of these obstacles. I've written some nice code to make extensions much easier for anyone to do this kind of thing in the future. I look forward to giving all of this innovation away. And I want to facilitate constructive criticism and improvement for these kinds of systems. Sheesh!
P.S. Lest I give an impression that PostgreSQL is worse than comparable systems; no, its actually better. Double sheesh!