www.delorie.com/archives/browse.cgi   search  
Mail Archives: geda-user/2023/05/03/00:09:50

X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f
X-Recipient: geda-user AT delorie DOT com
X-Original-DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=igor2.repo.hu; s=k1; h=Content-Type:MIME-Version:Message-ID:Subject:From:To
:Date:Sender:Reply-To:Cc:Content-Transfer-Encoding:Content-ID:
Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:
List-Subscribe:List-Post:List-Owner:List-Archive;
bh=pA3zXrIZZJBGjsf6T+5bXKNLbf5X1WXK62pdy5T88ac=; b=cWW8473CQW9vAdRMJYIA2i7pu6
xcpOM1kkYIhvBwth9vS31/1zt2+yOiLtCvHwLKyeLZaEbBkxTWBQA5/lywR1jveINIPeAryD7vqK2
Bdu7gQlQr+N4OYC2a/sjF3xf5ofBuT8Y4mYlDpMbkBcuCgh0adESv1lOA1WeDR6AFqEc=;
Date: Wed, 3 May 2023 05:49:53 +0200 (CEST)
To: geda-user AT delorie DOT com
X-Debug: to=geda-user AT delorie DOT com from="grnd AT igor2 DOT repo DOT hu"
From: "grnd AT igor2 DOT repo DOT hu [via geda-user AT delorie DOT com]" <geda-user AT delorie DOT com>
Subject: [geda-user] new EDA suite: Ringdove
Message-ID: <alpine.DEB.2.20.2305030537420.25839@igor2priv>
User-Agent: Alpine 2.20 (DEB 67 2015-01-07)
MIME-Version: 1.0
Reply-To: geda-user AT delorie DOT com

Hi all,

with sch-rnd 1.0.0 released, the Ringdove EDA suite also reached the first 
milestone: it now offers all tools that one requires for PCB design. It 
will expand of course, in different directions. Plus following the best 
gEDA traditions, even taking them a bit further, Ringdove member projects 
can be used separately, for different workflows, communicating with 
non-Ringdove software.


In Ringdove I believe I managed to solve a few problems that seem to be 
unresolvable in gEDA. This is because I took a step back and evaluated all 
the design decisions we took for granted in gEDA and made some changes in 
them for Ringdove. Since these give the major difference and you already 
know gEDA well, this mail is organized around showing those differences in 
details. I will try to show what I kept from the ideas of gEDA, what I 
changed and why I think the modified version is better.

A table-like summary is available online at:

http://repo.hu/cgi-bin/pool.cgi?project=ringdove&cmd=show&node=vs_geda

Some background in why I thought the good choice was to roll my own EDA 
suite:

http//repo.hu/cgi-bin/pool.cgi?project=ringdove&cmd=show&node=vs_geda2

Comparison of pcb-rnd and pcb:

http://repo.hu/cgi-bin/pool.cgi?project=pcb-rnd&cmd=show&node=vs_geda



1. toolkit vs. integration

Ringdove is a bit like gEDA: a set of mostly independent tool 
projects, each maintained in their own, separate repo. Each can be used 
without the others. Each can be replaced in the workflow with something 
totally different from another source. 

But I took it further. In gEDA, this is the saying, like if it was a real 
general thing. But what it really means is that gschem/lepton can export 
multiple netlist formats. So you can replace everything after 
gschem/lepton, and that's good. But unlike sch-rnd, gschem/lepton can't 
load sheet or symbols of other editors. Unlike pcb-rnd, pcb can't load 
boards and footprints of other EDA tools. And unlike pcb-rnd, pcb can't 
import a dozen different netlist formats, so it's rare that people feed 
pcb with netslists not coming from gEDA. Ringdove took it further by 
opening up the workflow at many more points.

Another major difference is that in gEDA, toolkit on the UI means that 
every single project looks and works differently and sometimes even 
have/had different GUI dependency. The most annoying aspect is the 
different mouse bindings. I know, I know, it's all configurable... but... 
really... Maintaining tools separately, making them replacable doesn't 
necessarily mean they have to make user's life harder by having 
unreasonable UI differences. Ringdove fixes this: the data model is 
different in each tool, but the generic UI logic, default mouse bindings, 
default hotkeys are the same. So it's easier to learn and switch between 
the tools, without any excess integration.

This goes deeper: in Ringdove the config file sytnax is the same and 
config file locations/customs are very similar too. So you don't have to 
learn 3..4 different formats because you need to use an sch editor, a pcb 
editor and forward annotation.

In fact these are so easy in Ringdove because there's a common, shared 
lib, called librnd, that offers a a HID API (similar to pcb's), a config 
API, and some other similar generic infrastructure. But it does not do 
anything for the data model. So when I need to interface a new GUI 
toolkit, like it was with gtk4, I work once, and all ringdove apps get the 
new GUI automatically. But this connection is only technical, librnd 
doesn't have any idea what the tools are doing, it merely provides the 
boring, generic, low level tasks (API to do GUI, conf files, menu files), 
that's how excess integration is avoided.

Ringdove also offers an _optional_ project file support. If you choose to 
use it, you can store your project-level configuration, or if you want, 
even your file names in the project file. When used, both sch-rnd and 
pcb-rnd know how to load and handle it. So instead of having a separate 
local gafrc, then some other local config file for gsch2pcb, and then 
still having to have a Makefile if you don't want to remember all the file 
names all the time, you can have a single project file solve it all. But 
you don't have to: you can totally go without a project file, with 
Makefiles, shell scripts, or loading all the files manually from the GUI. 
(And you can do a netlist export from the sch-rnd GUI too.) So more 
options, each taken a bit further.


2. project management

A side effect of the toolkit approach in gEDA is that there's no deep 
cooperation between the projects. I mean what was the last major feature 
that required more than 2 weeks of work in at least two different gEDA 
projects and resulted in a fature that would have been impossible if only 
one of the projects did it? In Ringdove, this is different: we think in 
features in workflows, spanning multiple tools/projects; these features
are not blocked by subproject boundaries.

In other words, gEDA is really an umbrella, a collection of otherwise 
mostly unrelated tools that sometimes happen to work together - but are 
not designed together, not coordinated. Ringdove is an EDA suite, which 
means development is coordinated.


3. Reduced dependencies

In Ringdove, an important goal is to keep software bloat low, including 
avoiding unnecessary dependencies. A fancy programming language may be fun 
for the programmer, but is a burden to the user. Yet another dependency, 
yet another thing that breaks in a major version number change. The myth 
is that you can't write complex GUI apps without <insert your favorite 
dependency here>. The proof that you can is Ringdove, implemented in ANSI 
C89 (except for the optional gtk plugin where gtk forces us using C99 and 
glib). No C++, no guile, no python.

Ringdove build doesn't depend on autotools; ./configure && make && make 
install just works, without autogen.sh, without having to figure which 
version of autotools is required and how intltool or libtool broke this 
week. In Ringdove ./configure figures what's the best it can do, and 
prints a summary of what choices it made and why. So you don't need to 
re-itrate ./configure 5 times just to expand on --without arguments as you 
figure it wanted to depend on something more you didn't need.

All in all, reduced dependencies makes it easier to complie and reduces 
risks of the project getting broken and bitrotten over time.


4. better CLI vs. GUI balance

Ringdove doesn't have a GUI tool that couldn't be compiled without GUI. 
This sounds silly first, like why would you want to use a pcb editor or an 
sch editor without GUI?! But there are a lot of applications, ranging from 
automatic file format conversions through preview generation to automated 
design and verification.

Ringdove HIDs are similar to pcb's. Except that you don't need to make 
your choice compile-time: you can compile multiple (GUI and CLI) HIDs and 
choose runtime. You can use the same executable to do your interactive GUI 
editing and then call it from a Makefile to do some automated 
action-script processing. Or you can use the same executable to do 
rendering with gtk2+gdk on 2 layer boards and gtk2+gl on with 
translucency on 8 layer boards.

All our features work from both CLI and GUI. For example you don't need to 
run a separate, CLI-only step to export a netlist from a schematics. You 
can do it either using CLI with a command (from a shell or Makefile) or 
from the GUI (from a menu and a dialog box). In fact, netlist export is 
just an export, same as png or svg export, which also work from both CLI 
and GUI. Forward annotation and backward annotation also work from both 
CLI and GUI.

You can also edit your config file both with a text editor from the 
command line or with a GUI in a nice tree view in each tool.


5. balance between out-of-box usablity and flexibility


Ringdove apps have most of their code in plugins. The advantage is that 
plugins are all optional. If you don't like a feature, you can turn it off 
by not loading (or not compiling) the plugin that provides that feature. 
Or you can write an alternative implementation of that feature in another 
plugin (or user script) and load that instead.

This includes a lot of things that would normally be considered 
mandatory base feature, like native file formats, GUI, or drawing tools.

So Ringdove can provide a set of plugins that make it easy for new users 
to use the tools out-of-the-box while it doesn't have to sacrifice any 
flexibility because all these plugins are replacable by advanced users.

Practical examples, features that depend on plugins:

- the slotting mechanism in sch-rnd

- transistor problem solution (devmap/portmap) in sch-rnd

- whether you store your pcb-rnd footprints or sch-rnd symbols in a 
directory or in some database (e.g. sql) or "in the cloud"

- how you do pcb autorouting


Best regards,

Igor2

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019