# pcb-rnd devlog

## unglib: glib removal

by Igor2

### glib problems

As mentioned in a previous post, glib is sometimes dangerous. Even if it was not, it's still huge and contradicts the UNIX philosophy: Do One Thing and Do It Well. Glib tries to do a lot of things. I do not doubt it is trying to do each of these things well, but as a combination it's pretty much impossible to Keep It Simple, Stupid. While glib is modular in design, from the viewpoint of an application it is not modular: it's highly unlikely that the application can replace a part of glib while keeping the rest.

The source of these problems is that glib is a "megalib" that tries to solve a host of problems as a package.

### The solution

The solution is to replace the megalib with a set of independent minilibs. Each minilib:

- tries to do one thing - e.g. linked lists, without coupling it with a custom memory allocator
- is simple - the API is so small that it's easy to learn it in minutes
- is small - so that if anything breaks it's very easy to find and fix the bug (when did you last debug internals of glib?)
- is replaceable - since they are independent, if one doesn't work up to expectations, it's real easy to replace it without affecting any other part; e.g. replacing linked lists without replacing hash tables

The minilibs are imported as svn externals in trunk/src_3rd. They are small enough so that they can be distributed together with pcb sources.

### Current state

The "unglib" patch is mostly done. All references of glib are removed from the core and the lesstif hid. There are a three components that still depend on glib, but they each can be disabled:

- the GTK HID: because gtk is already coupled with glib, it doesn't make much sense to remove glib from the gtk HID code
- the toporouter plugin: the code is huge and will be potentially deprecated anyway (lack of developer resources/user interest)
- the puller: glib should be removed from the puller long term but the code is big and there's no much user need for it in pcb-rnd

This means pcb-rnd can be compiled with lesstif (or a compatible motif) on a UNIX box without depending on glib. Together with the earlier effort that removed autotools, it means a UNIX box without any "GNU infection" should be able to compile and run pcb-rnd.