I've been working on a from-scratch to-be opensource EDA package called "horizon" for the last few months. Expect it to appear on github within the next two weeks. Still need to clean things up and write some docs on how to get started. It's very far from finished and polished, some features are merely proof of concept or have no GUI yet, but the overall architecture is there.
Key features so far:
- Netlist-aware schematic editor, i.e. net labels, etc. are derived from the netlist, not from the schematic,
- Unified editor: Same editor for everything from schematic symbol to board, uses modern (shaders, no glBegin() and friends) OpenGL for fast and glitch-free rendering
- uses JSON as on-disk format
- Sane library system: Each item is stored in its own file, simplifying version control, uses SQLite for easy lookup
- Implemented in modern C++ with Gtkmm for the user interface, builds and runs on linux and windows
I've started this project since I've been dissatisfied with the overall architecture of Kicad. The CERN people have made the PCB editor very good, but schematic entry and library management are still in a rather bad shape.
Let me give you some detail on what I mean by "sane library system". To me, having to organize symbols, packages and the like in libraries, always seemed kinda pointless and annoying. Horizon does away with them and puts everything into one global "pool". Contrary to other EDA packages, parts aren't defined by their symbols, instead it goes like this:
On the very bottom, there's the "Unit". It represents a single gate with all its pins. On the next level, there's the "Entity". An entity instantiates one or more units as gates. For example, the entity for a quad nand gate consists of four gates using the "nand" unit and one gate using the "power" unit. An entity can be generic, e.g. "Quad nand gate" or specific to one particular part, i.e. ATTiny85. For their representation in the schematic, each unit is accompanied by one or more symbols.
To link these with packages there are "Parts". A part is something you can actually order, so no "74HC00" for you, instead it could specify a SN74HC00D from TI. To make things easier, parts can inherit the pin-pad mapping from other parts. To the netlist, the part isn't important, so you can easily change the part as long as it uses the same entity.
I hope that wasn't too confusing - stay tuned for the release!