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 Content-Type: text/plain; charset=US-ASCII 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