Don't read this as an endorsement necessarily, but merely a choice of venue:
You might have better luck at StackOverflow, or the CS or EE stacks.
Stack is, I guess, a bit notorious for being strict about questions that must be well-formed and researched, and poorly formed, or ignorant, questions quickly tend to get downvoted and closed. But it's also open, in that, you can find an answer for almost anything, with the right keywords; and if not, likely you can ask that question and earn a few fake internet points along the way (yay..). Worst thing maybe, it turns out a repeat of existing question that you just didn't find the keywords for; which still answers your question, though it may not feel very satisfying that way. But hey, if it works, right?
So, do your best, collect all relevant info you can, search for most every permutation of keywords you can think of, and hopefully your issue is unique and new, and others benefit from it. If you find your solution in the process -- rather anticlimactic, I know; and perhaps it would be nice to tell others that might be searching for x/y/z keywords but they actually need t/u/v to find it as you finally did; but if nothing else, you can always comment on, or add answer to, the post you found (minus new-account limitations if applicable).
If nothing else, think of it this way: it's a formal, gating, rubber-duck experience. As you collect your facts and thoughts, you might catch something you didn't before.
It's an unusual environment. Whereas the traditional forum suffers from abject anarchy (inbetween the totalitarian mods/admins, when applicable..), Stack suffers from abject democracy. Even comments can be upvoted, and questions and answers can be up or down voted. Moderators are elected. Conversations are discouraged (but generally tolerated). Facts and references do generally get upvoted, but answers ultimately rise by consensus, not truth. (Which is by necessity anyway, say on the less hard-science Stacks, but generally accepted as how we do science, too, for better or worse...) It means the reader is never free of their personal responsibility for critical thought. But such is democracy: it can only work when every individual is responsible with what power they possess.
Which is as free software is, after all. You get what you paid for, and that amount is $0. Maybe it's helpful, maybe plugging it into your system causes it to crash and burn. Who knows. Actively malicious code isn't common, at least (and maybe is fairly obvious in its function, or obfuscation?), and usually the worst thing that happens is you waste weeks on end, trying to make something work, that, it seems more and more likely each passing day, never was intended to work in the first place.
The cost of purchase has been replaced with the cost of critically evaluating the resources: Is this fork better than that fork? Who has the most up-to-date codebase? Do I even want the latest version? Or do I want that similar other project instead? And there might not be any good answer to these, other than, try them all yourself. Which is one thing already, when you just have to download and install a package, build it, and play around in the app; it's another thing entirely when you have to integrate it into an embedded system, with variable amounts of porting required. Let alone the difficulty in testing, as you may not have easy hooks, debug, IO, etc. to test the various features as you would on a PC.
There is no good/easy solution to this, of course; it's just stuff you have to do.
As for ranting, my last couple notable experiences include:
- Was given a laptop with Debian on it. Does have a graphical shell. But seems you can do basically nothing through it, besides open xterm. Not even an install-programs or configure-system dialog. Is this supposed to be encouraging me to like the ecosystem? (No, as it turns out; Debian is shite. But when there's no one around to tell you that...) Eventually ended when I tried to get a specific version tool on the system, which didn't exist in the distro servers, so, just patch in some other server right? Suddenly some deep C runtime thing updated from the new server and fuckin' bricked. (Laptop isn't useless, it has W10 on it too. It's... I'm not going to say it's "fine", but it's usable.)
- The above was after such time I realized, no, updating is not actually a universal good. ESPECIALLY in open ecosystems. You want bugfixes? Fuck you, have a new API too. Sometimes fixes are backported to other versions, sure, but where does it say so? There's no universal "oh yeah we got this, this sub-version is cool to use" message anywhere. It's a free-for-all. You get what you pay for. Well, case in point, I've been using MiKTeX 2.9 for years -- technically decades now, I suppose -- I thought it might be worthwhile to update to latest. (I forget if there were incompatible packages coming through that motivated that, or purely out of "man, this really is getting old, it must be crusty, surely the new version is improved".) As it turns out, the latest (at the time, 21.1 I think it was -- wow, what an increase in version numbering, my old stuff must be TRASH!*) runs slower if anything, and is strictly incompatible with one of the most powerful packages I use (
tabu isn't updated anymore, and is incompatible with LaTeX3, the major change). Not to mention, upgrading was hair-pulling. I think I ended up uninstalling it twice and fresh installing MiKTeX and it finally mostly worked (had to change some paths in TeXMaker).
*Chrome and Firefox incrementing on practically a monthly basis, should've clued me in: version numbers are as meaningless as anything else in this field.
And the replacement for
tabu (
tabularray) -- while nice by itself (with
rare exceptions -- is very much incompatible. ALL my old documents that used
tabu, must be
ported over to use the new system. Because I thought updates were the responsible thing to get. Fuck me.
- I integrated
freemodbus last month. Which is technically the first network stack I've implemented on something, albeit a lightweight one. Neat. (Well, maybe except for GPIB, but that's not really organized as a stack, that was a flat adapter really.) It was a bit of work (a few days worth), just to familiarize myself with the structure, and ponder a bit about how to handle the porting (platform-dependent stuff goes in a couple files, of which the fork I started from had some
#defines already between related platforms, not sure if I should follow that, or, who cares?*), but the stack itself Just Works(TM). Well, I did find two bugs, one by inspection, one by test, both rather minor, and already on the tracker (but not implemented in current branch).
*No one cares. It's free software, remember!
That it works by callback functions, is kind of annoying, from an embedded standpoint. It could be streamlined a lot. C++ for example would be able to realize (I think?) that these pointers/structs/whatever are all static through the program, so can be optimized down to straight calls; but this is C. But most of the code runs from
main() anyway, and the baud and poll rate are both low enough that, who cares, it's hardly anything. So, it's fine as it is.
- Or stuff like compilers, or related toolchain stuff. The latest often isn't the greatest, differences between avr-gcc 4/5 for example have been mentioned before. avr-libc is out of date for the latest generation parts. MCP has their own version but last I checked it wasn't available publicly (I
had to ask for updated headers). When I started with AVR-DA, it was juuuust early enough that free tool support wasn't quite there (pyupdi / pymcuprog was functional, albeit slow). Since March or so, AVRDude has integrated it, and things feel pretty normal. Granted, every new wrinkle that adds and modifies my toolchain(s), means one more step removed from "standard" AVR Studio workflow, and who knows how compatible those are (if anyone should need to build/modify my code, that is, which so far hasn't been much).
- On the other hand, I've had nothing but success with Doom ports, for example. GZDoom and friends are... they've only ever been drop and play. No library fuckery (appropriate version SDL is included). No configuration (at least anything that you can't find in menus, and rarely anything that's not in your existing config file). No installer. Dump it in your Doom folder and go. It performs well*, it's incredibly rich with features (software/GL renderer, visual tweaks, postprocessing..), and, I don't think I've ever had it crash or anything, that I can't attribute to bad add-ons or my own fault.
*The worst performance I've seen, is extremely rich scenery, like Elementalism (which I highly recommend, by the way, if you're much into FPS at all, let alone Doom as such; it's very much a modern creation!). And even then, the performance isn't much worse than others, despite the age of my computer (I think most struggle to render the richest scenes at 60 FPS; I got down to 15 FPS or so, which, sucks, but is still very much playable: controls/behavior are still real time, just the rendering is delayed). Needless to say, these are terrifically embarrassing rates for the number of actual triangles being rendered, but... it's a force-fit, having to render all that through Doom's BSP trees
plus whatever hackery makes for sector-over-sector in these WADs (reference sectors? portals? I don't know; several tricks actually I think). More that it's doable at all, given the limitations imposed by the engine, and is still playable.
Anyway, I'm sure I can think of others, but that's a good enough cross section to paint the picture.
Or uh, perhaps too obviously, I'm using Chrome right now, or Firefox from time to time. But Chrome in particular is very much a commercial product---it has literal employees working on it. Such projects are highly exceptional in the FOSS ecosystem overall. They're
an example, sure, but very, very far from the rule. So, not including in the above list for that reason.
Tim