pcb-rnd devlog

"Edacore" minimum commons

History and background: there is a lot happening in pcb-rnd these days. A set of these seem to nicely connect up and form something that's a big portion of the edacore idea, just implemented in a different way. We did not have a grand edacore-like plan behind these, they mostly started to happen independently. But they really happen to connect that way. In the same time edacore seems to be in hibernation. When I realized this, I contacted the edacore people to find out if they are interested in a reboot.

Naming: they haven't yet answered; for the purpose of this document, I'll use the name "edacore", but I mean it more like a concept than as a project name or implementation. It may be that it gets realized as a reboot of the original edacore and it will be the official name; else we will just find a different name for it.

Acceptance and mutual respect

Before we start, we must accept that we have alternative implementations, different projects going in different directions. Although this means code and effort duplication, this is not a bad thing, this is a good thing. Most of us doesn't want to live in a world where there's only one EDA software available, even if every development effort is concentrated there. (If you think you do, then rethink it with substituting your favorite package with one you really dislike and imagine that's the only one available.)

Respecting the choices of another project seems to be simple in theory, but it is important to see a few examples of what we need to accept in practice. Else we make decisions tat are unacceptable for one project or another too easily. An incomplete list of examples of what differs in another EDA project:

In practice this means if we are to do anything common, shared, we either accept the ways of the other projects and come up with a minimal common denominator or the common/shared effort will be refused by some (or even most) projects we target. This has a few consequences, some requirements we must obey while designing the common:

What we could do within these limits?

These problems are not new. There are good examples on how people have solved these in the past - some examples implemented decades ago and are still widely used in one form or another! The most trivial of these are network protocols: SMTP, ftp, HTTP, TCP/IP, the IRC protocol, etc. What's common in them:

This is a pretty important difference compared to the original edacore idea (of the 2015 FOSDEM talk). We should try to write a lib and sell that as the common. Instead, we should:

In other words: solve the interchange problem, not the code duplication problem!

What we don't need to do?

We could also do any of these, but to get the project started and be useful, we are not required to do them. It's an important consideration: we don't have much resources, we should spend it where it's spent the best. I believe we don't need to do the below in order to get an "edacore" idea work:

What we could expect from such a project?

Assume we designed a set of interchange formats and maybe mechanisms and we optionally provided some libs and tools.

What we should NOT expect from such a project?