Can we have a revised release process?
-
As a hobbyist, I never minded slightly buggy things. It was exciting helping out projects to become better. But, I am no longer a hobbyist and use my printers professionally.
I don't want to install any more RC's just to have fixes, because almost invariably, something else is broken.
Can you please have a stable branch that is blessed and receives hot-fixes along the way? While the RC's are on a separate track for being actual Release Candidates and not things you have to install to get fixes?
This would be very beneficial to Duet customers as I'm sure they don't all want to dog-food, especially when the food is slightly spoiled 90% of the time.
As a commercial product, it just makes sense to have this release process. Frankly, it's this reason that I'm hesitant to recommend Duet products.
-
2.02 is official now. You could have waited for it if you didn't want to install the release candidates.
Can you please have a stable branch that is blessed and receives hot-fixes along the way?
2.01 was the stable branch. The 2.02 RCs were hot-fixes along the way. How is what you're asking for different than how things are currently?
-
What you described is paradoxical. I can't stay on the stable branch AND get hot fixes.
A couple months ago when 2.01 came out, that's the stable release.
Now, if I want fixes, I want them applied to 2.01, i.e. 2.01.1 for the first hot fix release.
I don't want to install 2.02-RCs because they're buggy. By definition, they are not hot fixes, they are beta releases.
-
@gnydick said in Can we have a revised release process?:
I can't stay on the stable branch AND get hot fixes.
You are correct. Since about 90% of "fix" code hits other fix code (in ANY software project, ANYWHERE).
-
I occasionally do a bugfix release to stable firmware separate from the current beta/RC firmware cycle, but only if it's necessary to fix a serious bug that affects many users. Sometimes I truncate planned development work so that I can focus on getting a release out earlier than planned, in order to make bug fixes in beta firmware available in a stable release.
As @Danal says, many fixes are too complex to be implemented without significant risk of unwanted side effects. The other major consideration is that the process of testing and releasing new firmware takes a lot of time, so if I did two separate streams of firmware releases then I would get a lot less done.
Most reported bugs either have workarounds or affect only a small number of users - often users who are pushing the limits of 3D printing - and I think this in this case it is reasonable to ask the affected users to use a workaround or install release candidate firmware.
RepRapFirmware is open source, so if someone wants to create and maintain a stable-release-bug-fix fork, they are more than welcome to do so.
-
It is confusing to me as well having all these releases. I am not sure what is the latest stable release and what to install or to push to others using my design
-
@pro3d What is confusing?
The latest stable release is always that one without RC or Beta/Alpha in they name. So now it is 2.02 -
@dc42 well, I don't entirely agree with the philosophy that it's better to go through new feature development because "fixes are too complex to be implemented without significant risk." "Fixes" are by definition and practice less risky.
Honestly, fixes to the stable branch, should go out first.
I'm not sure what the motivation is, but it sounds like you're on a path to spread yourself too thin.
I know growing a business is hard and innovation is important, but innovative tech that isn't stable will never win in the long run.
I was shocked to go through the release notes going back in time. There were so many regressions of simple functionality, as well as I remember one note was to disable a g-code that was part of the stock distribution of config files.
There is a lot of opportunity for improvement via CI/CD. I've no experience with this kind of code, but I do know how to automate things. Maybe I could help you set up a CI/CD system.
-
How would you propose to automate testing? That is the main problem, especially as RRF supports such a wide range of configurations. Most regressions that occur only affect users with particular configurations.
-
@dc42 well, in general terms, figuring out input/output pairs and how to evaluate the output against expected results.
I can take a stab at some guesses...
For axis movement, there could be encoders connected to a belt to confirm acceleration, velocity, jerk, etc.
For current and voltage regulation, probes connected to those outputs.
Run print routines through probes by replacing motors with probes.
I actually have a friend who is brilliant at hardware, I can ask him if he has some ideas.
But basically, control is easy since there are network interfaces for input. Comparing output to expected results is easy, that's just some software. The only link in the chain as far as I see it that's missing is data acquisition. We could easily setup an automated build, deploy, test loop.
-
The problem is that it isn't really like simple software where one can write test cases. Sometimes bugs come up from very obscure printer setups or G-code. I'm really not sure automating testing is practical here.
Basically what you're asking for would be nice, but probably not practical at the price point and volume Duet sells at. There's just not enough money to add the staff to accomplish what you are describing, so a system of RCs with effectively "beta testers" is used. There's a reason "real" motion controllers with similar features to Duet are an order of magnitude more expensive.
As for solving your predicament, why not just wait until a stable release (as in not a RC) comes out?
-
@elmoret I don't have a choice at this point.
But I don't agree that it's not feasible to automate this testing. I worked in a confidential hardware lab doing hardware test automation. Frame rates, touch screens, game consoles, set top boxes; managing these things from output quality, all the way to managing the devices when they won't reboot and need a remote physical recycling.
The obscure setups is one thing, yes, that is hard to get coverage on, but everything else is doable.
First of all, we can automate the sending of g-code to the box, that's trivial. We can also get 100% coverage of all g-code permutations. It's as simple as developing the use cases for all of the options and a simple script that iterates over them, generating every possible permutation. I've done this before, so I'm speaking from experience.
Assuming there is a measurable response somewhere to receiving g-code, then that closes the loop on g-code testing.
Whether or not the hardware actually does the right thing, that's a separate thread to discuss, but at least we can cover things like "having to send G29 twice because the first one isn't honored." That was a real bug.
Also, i'm guessing there is software somewhere that can simulate PCBs with certain chips on board. That is really, really not my area of expertise, so that might be prohibitively expensive or complicated to set up. But I thought I'd throw it out there in case anybody knows.
So, the only assumption we need to be true is that the device will output some response to g-code that we can measure. If that's the case, we certainly can build a CI/CD system quite easily.
-
@gnydick I'm sure the cost of your elaborate testing scheme would far outweigh any benefits. I would wager that even the best testing scheme you could devise would both miss important bugs, and provide false positives far too often.
-
@gnydick said in Can we have a revised release process?:
@dc42 well, in general terms, figuring out input/output pairs and how to evaluate the output against expected results.
...snip...
But basically, control is easy since there are network interfaces for input. Comparing output to expected results is easy, that's just some software. The only link in the chain as far as I see it that's missing is data acquisition. We could easily setup an automated build, deploy, test loop.Which would work great for the specific configuration of the "test harness" proposed. And absolutely miss bugs encountered in other kinematics and/or modes.
-
I've been a Duet customer for about two years. Every release I've downloaded, "Release" or "Release Candidate", has fundamentally worked on the Delta/Kossel printers where I have Duets. "Fundamentally" means I could print, and get high quality prints. That tells me those releases would have passed muster on a "Delta Kinematic" test harness. Physical proof that, during the period wherein I personally have facts at hand, such a test harness would have been pointless.
There have been bugs, subtle ones, in some of those releases, from the things that I've read, and/or the "fixes" in the next release.
But... again... I've ALWAYS been able to print... and if there was something I "did not find acceptable" in a release, then the "prior" release was less than five minutes away. To be clear, I never regressed... but I always could have...
In short: The existing release process has worked for me. Therefore, I have a very blunt question for @gnydick: Have you actually encountered an issue, in a release marked 'stable' (not an RC) that caused you to choose to regress to a prior release?
If yes, I'm curious what release, and what caused you to make that decision.
If no, then this is a tempest in a teapot. -
@gnydick Sorry if I wasn't clear. Yes, it would be possible (though really time consuming) to do what you propose. But it isn't practical within the financial/logistical confines of the Duet project.
If it helps it sounds like we have similar experience, I have done consulting work involving automated testing/writing of test cases for electronics running firmware, much like the Duet. Writing all that was about 100 man-hours of work, and I'd say the Duet is roughly 2 orders of magnitude more complicated than the device I was working on. 10000 man-hours of this type of work would cost $1M. That's no problem for National Instruments or Galil Motion Control, but its probably not tenable for Duet.
Even if ignoring my estimate, most sources (for example: https://stackoverflow.com/questions/174880/ratio-of-time-spent-on-coding-versus-unit-testing) estimate equal time devoted to development and testing. RepRapFirmware has been dc42's main focus for several years now, which comes to a number similar to the 10000 hour estimate above.
FWIW, Duet3D has/is going to move to fully automated testing on the hardware itself, at the assembly line. That's a lot easier to write test cases for though, since the order of things doesn't matter. If a solder joint is bad, it will show up, as opposed to firmware bugs which often require certain configurations or sequences of events to show up.
-
@danal you completely missed the point. I haven't had a problem with the stable that caused me to revert to the previous stable. But that doesn't mean that I didn't want fixes that were upstream.
My point is, if someone fixes something and the fixes are never applied to the current release, that's what I disagree with. That's like having to get Windows 11-RCs/beta for fixes to Windows 10.
The fact that the stable releases are, well STABLE, is kind of the point of being marked stable.
It's also meaningless to say that you could still print after applying any and all releases. Anything released to the public to use should be fundamentally functional. If you couldn't, Duet would not be in business.
If I'm remembering correctly, the double G29 bug was in a stable release where as the fix was only available in an RC, or waiting months for the next stable.
I'm not sure if you read my entire original post, if not, you should.
I don't know what everyone's backgrounds are, but there's nuance and experience when it comes to software development that tells me applying fixes to the current stable for bugs in the current stable will almost universally not be difficult or risky when compared to applying those fixes to future releases.
-
@elmoret to do what I described, I could implement it in a few days, provided I was brought up to speed on the hardware. It's quite possible we're envisioning different scope and scale.
I think it's more important to have a test harness that at least covers each g-code and regressions.
I agree, Unit tests are always a PITA. But if it were my job, I would be embarrassed to have certain bugs slip out that are the equivalent of forgetting to make sure your servers' disks don't fill.
-
@gnydick said in Can we have a revised release process?:
@elmoret to do what I described, I could implement it in a few days, provided I was brought up to speed on the hardware.
OK then. Here's the hardware:
1x https://www.mccdaq.com/usb-data-acquisition/USB-QUAD08.aspx
5x https://www.omc-stepperonline.com/Nema-17-Closed-Loop-Stepper-Motor-13Ncm184ozin-Encoder-1000CPR.html?search=encoder&sort=p.price&order=ASCThat covers all your steppers. Then you need a DAQ for DIO/AIO:
2x https://www.mccdaq.com/data-acquisition/low-cost-daq (the USB-200, specifically)
Two of the 8 channel DAQs would be plenty to cover fans, thermistors, endstops, heaters.
Tell you what - if you complete the project and dc42 finds it useful, I'll buy all the hardware back from you for original retail price, so you're only out the few days invested.
-
@elmoret it'll take more than that to learn all of those parts. I'm not experienced with embedded. I don't have the time or money to learn a ton of new things. But I'd be happy to take APIs provided and demonstrate what I'm talking about.
Are they high level interfaces or would I have to learn a ton of stuff just to get those probes bootstrapped and recording, synced, etc?
Are there simulators? I've found the KiCad code, but have no idea how to use it.
Long story short, if my knowledge can be bootstrapped, I can help.