rleigh
Joined 11 years ago
Joined 11 years ago
With the advent of USB and SATA we ceased to be able to source industrial embedded x86 boards which could run the application. At the time this was with Novell DR-DOS, which was relatively modern in terms of hardware support but still behind the times and we were struggling to manufacture new systems. The company was very small, so a full rewrite was investigated--I did a prototype using PostgreSQL and Gtkmm--but it wasn't realistic. Today, an AI could probably do a full rewrite in a day or two, including migration tooling. Back then, it would have been a multi-year effort for one person given the application's size and complexity.
My solution was to run Linux since it had full support for the hardware. Debian Sarge at the time. This used a Perl frontend and dialog(1) to present a simple menu system at startup. This did backups, software updates (over dialup!), remote access for support (again over dialup), ran backups and ran the main application. It would start DOSEMU which provided the application with VGA display, COM ports and parallel ports for the application to drive "directly" (from its perspective). It also used Samba and CUPS to provide the DOS environment with shared network drives with exclusive byte-range file locking needed for the multi-user network database to work with concurrent users without data corruption, and also multi-user report printing and receipt printing.
I left the company a year after this was put into full production, but the last I heard it kept the company viable with a supportable product for many years after until its owners retired. This kept software from the early 1990s running well into the 2010s, and there are likely still sites running it to this day.
True. But when you look at this, isn't the deeper problem that Linux remains such a monolith, and there's a stark difference between "included" and "not included" in the kernel. It's now over 35 years old. The fact that we can't have stable APIs and develop more out-of-tree drivers is not a strength, it's a weakness.
Even old Unix systems like SVR4 managed to have stable, public driver interfaces, despite being rather proprietary. FreeBSD manages to have drivers in its ports tree, with a stable API for a given major version. What makes Linux so special that it can't manage this?
I understand all of the arguments about why this has to be so. But... they might have made sense in the early days, but after 35 years it screams of immaturity. Plenty of other systems, including other open source systems, manage to do this, including having versioned interfaces so things aren't set in stone. Linux remains right at the extreme end of guaranteeing nothing. I've long thought this was unnecessary and counterproductive.
When it comes to compatibility, different companies and groups make different tradeoffs. Last week, I had to use a (brand new) datalogger. It came with a CD, and instructions for installing on Windows 98! And yet, it worked flawlessly on Windows 11. Looked dated, but perfectly functional. Can you imagine a third-party application from 1998 working on a contemporary Linux installation, or a Mac? Of course not, it's almost impossible to do this. Like it or loath it, Windows will run software from 35 years ago without trouble. It's not just about big office suites, it's about the thousands and thousands of useful tools that it will run without complaint, and that's what has made it so indispensable even while they continue to make it increasingly awful.
Apple made a different tradeoff, where compatibility is not guaranteed. It might be fine for a few years, but no one is using software from a 1998 Mac on a modern Mac, it just won't run. It's one of the reasons the Mac ecosystem is so limited, since there just isn't that huge backlog of material.
And Linux is that on steroids. The incompatible churn in libraries, tools, system services, windowing systems, it's both relentless and counterproductive. How many years will your software work until it breaks. Is it even possible to run on more than one blessed distribution in the present day. Linux is great, and it's a great platform to develop on. But it's an absolutely cursed platform to distribute software for.
Developers run software in VMs. Most people do not.
The "Linux" ecosystem is utter chaos, and there are too many developers who are their own worst enemies. There's too much churn, and too little strategic thought. Compatibility is king. Microsoft know this, or used to. But too many developers on the Linux/open source side of things don't care. They have repeatedly self-sabotaged the development of a coherent ecosystem throughout the last three decades by repeatedly breaking backward compatibility and replacing well-established software with incompatible replacements. Even RedHat. The pursuit of new and shiny trumps compatibility every time, and half-baked new technologies replace stable and established technologies long before they are ready, leading to developers and end users being eternal beta testers of rubbish. It is not possible to develop software for a platform which does frequent rug-pulls leaving your software unusable.
This isn't solvable by any individual, no matter how hard or how long they work for.
That's part of the reason why I switched to FreeBSD as a replacement for a good bit of stuff I previously did on Linux. It might be lacking in some aspects, but there's not quite the same level of insane and pointless churn without purpose.
And I say this as someone who used to hand-build kernels from applied patch files, back when it was fun and the improvements were consequential.
That said, I've got it easy. My colleagues who are chemists and biologists can't even ask one question. There are so many triggers in their memories and workspaces they can't even ask a non-triggering question. And we all work in medical diagnostics, it's not like we're doing anything remotely nefarious. Fable could be such a benefit, but the limitations make it worthless.
While the open-source part of me loves the more open nature of Prusa, the commercial-minded part loves the immediate convenience of the Bambu. But the environmental control is something which Prusa doesn't really do well yet. Heated chamber, as well as filament humidity control is something Bambu has done which Prusa has not, and when it comes to printing with "engineering" filaments like PA6CF, PA6GF and other higher-end lubricating plastics for bearings etc, along with support filaments like PVA which are incredibly hygroscopic, the Bambu is the only contender if you want high-quality prints that don't warp.
IMO this is where Prusa gave up the race and need to catch up. Give me equivalent or better environmental control, and I'll be happy to consider it.
The accessibility to non-experts, and the fact that it just works out of the box without fiddling around optimising settings, is why I have a Bambu family at work and zero Prusas.
ETL State Chart and Hierarchial FSM https://www.etlcpp.com/state_chart.html and https://www.etlcpp.com/hfsm.html
Quantum Leaps https://www.state-machine.com
I've used them primarily in safety-critical systems where complexity, timing and the ability to effectively verify behaviour is obviously important. Being able to separate the decision-making from the actions is a great aid. Having to strip back the decision making to "what do I do next" when I'm in this state and this event occurs is a bit different to how most programs are structured, but really does aid separation and makes it easy to reason about behaviour under different conditions.
The C0 control set (ASCII 0x00 to 0x1F) contains all sorts of esoteric functions, most of which are generally unused, and only a few of which are useful and could be implemented at a higher-level. ESC sequences are only part of the problem.
And this also applies not just to terminals, but to systems programming as well. None of these have any business in e.g. filenames, but it's all commonly permitted. Some systems do forbid them, and it should IMO be universal.
If we really want to fix this, then we would develop a character encoding that strips out all control characters entirely, including LF and CR, and have text be nothing but graphic text characters. It's so entrenched and convenient that it's difficult to see that happening. But I do think routine stripping of all control characters in situations that don't require them would be good for security.
I think it would have been useful for them to have really made a proper effort at modularising Windows along the lines of how Linux distributions and the BSDs do things. I can't see any way of recovery from the bloated mess they have created; they can't keep cramming any more in, it's an unstable, unusable and untestable mess.