Actually, unlike on Windows, fwupd itself contains the code to flash firmware on various types of devices, and all the manufacturer provides is the firmware file itself.
On Windows you can (apparently) provide an arbitrary installer yourself instead. That said, theoretically a UEFI upgrade could mess with your system since that firmware ends up running on the main CPU itself.
It is also conceivable that you could have rogue firmware on some other device that can mess with the system via DMA (direct memory access). But then we are talking full on hacking, and likely unreliable across different kernel versions etc. Notably monitors don't have such access. Enabling the IOMMU should also help protect against this (since that restricts what RAM addresses each peripheral can access).
Well, they included some MPL 2.0 repos of mine at least, but skipped others that use GPL3. Yet another that is a mirror of some otherwise lost firmware files for early 2000s wifi cards (and definitely isn't free software) is also included.
So possibly they filter out GPL2/3 specifically, rather than only include known permissive licenses. Which is a pretty bad way of doing it.
For me this is a killer feature. For a start, we value atomic commits, where each commit does one small standalone thing. This makes review easier, as well as going back and looking at history to figure out why something was done the way it was. An easy to read history is critical at a large company. Commit messages are often muliline and long and describe the why and why not other alternatives that were considered.
But this also means your PR branch should have clean history, and editing said history is absolutely encouraged (even mandatory). We use azure devops and flawed as it is, the review UI handles this case well. I believe github is far worse at handling force pushes.
Review, design review and even CI runs takes time, so I often need to start building on top of a PR before it is fully finished and merged. Because I work in a sector where we have actual certifications (safety critical systems, think things like brake controllers, medical devices, etc) this means "move fast and break things" just isn't an option (nor should it be). This also slows down the PR workflow. Even after the C++ code built, you can expect a few hours to run the test suite with full physical simulations. And review can take days for larger and more critical changes.
So yes, many branches have more than one commit. And it is not uncommon to build upon yet to be merged branches (with the knowledge that small things will need to change as the followup is being rebased on top of changes of the original PR).
Another tip, to save some plastic on prototypes: if you have a paper printer you can make a technical drawing in your CAD program, set scale to 1:1, print it out and compare (make sure to measure to check that the printed size is actually 1:1). If need be use scissors to cut out the profile.
This won't take plastic shrinking into account, but in my experience it can remove the first few iterations at least. And it is way faster, and paper is less bad for the environment.
Snapshots are great for solving accidental oopses, and for getting consistent backups that reflect a single point in time. But they aren't backups. If the HDD or SSD dies snapshots don't help. If the file system gets corrupted snapshots don't help. If the file data becomes corrupt snapshots don't help (since they only store a single copy of any version of a file).
So snapshots are no substitute for backups. I run btrfs and I do backups, and I sync those backups to a remote location (look up 3-2-1 backup).
I strongly disagree. I'm going to quote myself from reddit here:
Why would you expect to be able to use an old compiler and new crates? Shouldn't you just pin everything to the old versions? The MSRV aware resolver (that we had stably for a year now) makes that seamless. I don't see why they expect to be able to eat their cake and have it too.
This comes up again and again by LTS fans, be it safety critical or Debian packages. Yet no one have managed to explain why they can't use a new compiler but can use new crates? Their behaviour lacks consistency.
And from a later reply:
Now if they want to fund the maintenance in question, that is an entirely different question (and would be a net benefit for everyone). But that tends to be quite rare in open source. https://xkcd.com/2347/ very much applies.
I think some fixed-size collections and stuff like that would be super nice in core.
If you don't mind using a crate: take a look at the well regarded https://lib.rs/crates/heapless (but yeah, having it in core would be nice, but might be too niche).
It isn't open source, but DaVinci Resolve is available for Linux. With limited features if you don't pay. Might be overkill for what you do, and I understand it can be finicky to get it working (needs nvidia, poor support for AMD, very limited format support unless you get the paied version, ...).
I don't really do video stuff, but I did play around with it a few years ago, and it seemed very comprehensive.
I don't use Gnome, but they hate to expose settings in general it seems and like to dumb down everything (and that is why I don't use it). The issue here is that the you need KDE, Sway, Niri, Xfce, etc all to implement a setting for this. Middle mouse paste is useful and has been standard on Unix-likes for decades. There is literally no reason to remove it.
Yeah, the Flint 3 seems like a worse overall router when it comes to computational power and chipset. The only thing it has going for it is WiFi 7 (instead of 6) and 2.5 G ethernet on all ports. The Flint 3 is also more power hungry, which isn't great given the high energy costs in Europe.
Most people don't benefit from WiFi 7 (WiFi 6 is already good enough for almost everything) and if you want more than 2x 2.5G ports, consider getting a (managed) switch to extend the router with.
No, it was your assertion that a wheel being too fiddly. It seemed quite broad (stating it as an universal truth). It might be for you, but not for most people (but you wrote it as an unqualified statement).
While that works, it will use more electricity than an all-in-one ARM based router. Depending on prices and renewable/fossil mixture where you live, this may or may not be a concern.
GL.Inet products that use Mediatek chipsets are great since you can usually flash standard OpenWRT on them. I would avoid routers with different chipsets since they are unlikely to get proper support.
(Though I can't say that my MT-6000 is cheap, but it is an extremely capable router. That is top of the line though, they have cheaper stuff.)
Not true, if there is no user visible setting for it. Changing a hidden gsetting via a command line is essentially removing it since it will likely bitrot and then be fully removed in a few years.
For many people this is a non-issue. I think this a case of just accepting we are different and don't need to force our view on everyone else.
Maybe 15 years ago I had a mouse with a tilting scroll wheel (for side scrolling), on that one I did have issues with middle click, for about a month until I got used to clicking straight down.
So maybe it is just a question of practice? Maybe not. But since both options exist there is no need to get upset.
I think a lot of modern software is bloated. I remember when GUI programs used to fit on a floppy or two. Nowdays we have bloated electron programs taking hundreds of MB of RAM just to show a simple text editor, because it drags a whole browser with it.
I love snappy software, and while I don't think we need to go back to programs fitting on a single floppy and using hundreds of KB of RAM, the pendulum does need to swing back a fair bit. I rewrote some CLI programs in the last few years that I found slow (one my own previously written in Python, the other written in C++ but not properly designed for speed). I used Rust, which sure helped compared to Python, but the real key was thinking carefully about the data structures used up front and designing for performance. And lots of profiling and benchmarking as I went along.
The results? The python program was sped up by 50x, the C++ program by 320x. In both cases it changed these from "irritating delay" to "functionally instant for human perception".
And I also rewrote a program I used to manage Arch Linux configs (written in bash) in Rust. I also added features I wanted so it was never directly comparable (and I don't have numbers), but it made "apply configs to system" take seconds instead of minutes, with several additional features as well. (https://github.com/VorpalBlade/paketkoll/tree/main/crates/konfigkoll)
Oh and want a faster way to check file integrity vs the package manager on your Linux distro? Did that too.
Now what was the point I was making again? Maybe I'm just sensitive to slow software. I disable all animations in GUIs after all, all those milliseconds of waiting adds up over the years. Computers are amazingly fast these days, we shouldn't make them slower than they have to be. So I think far more software should count as performance critical. Anything a human has to wait for should be.
Faster software is more efficient as well, using less electricity, making your phone/laptop battery last longer (since the CPU can go back to sleep sooner). And saves you money in the cloud. Imagine if you could save 30-50% on your cloud bill by renting fewer resources? Over the last few years I have seen multiple reports of this happening when companies rewrite in Rust (C++ would also do this, but why would you want to move to C++ these days?). And hyperscalers save millions in electricity by optimising their logging library by just a few percent.
Most modern software on modern CPUs is bottlenecked on memory bandwidth, so it makes sense to spend effort on data representation. Sure start with some basic profiling to find obvious stupid things (all non-trivial software that hasn't been optimised has stupid things), but once you exhausted that, you need to look at memory layout.
(My dayjob involves hard realtime embedded software. No, I swear that is unrelated to this.)
On paper they are efficient. In practise, all pointer based data structures (linked lists, binary trees, etc) are slow on modern hardware. And this effect is more important than the complexity in practise for most practical high performance code.
You are far better off with linear access where possible (e.g. vectors, open addressing hash maps) or if you must have a tree, make the fan-out factor as large as possible (e.g. btrees rather than binary trees).
Now, I don't know if Haskell etc affords you such control, I mainly code in Rust (and C++ in the past).
XOR lists are obscure and cursed but cool. And not useful on modern hardware as the CPU can't predict access patterns. They date from a time when every byte of memory counted and CPUs didn't have pipelines.
(In general, all linked lists or trees are terrible for performance on modern CPUs. Prefer vectors or btrees with large fanout factors. There are some niche use cases still for linked lists in for example kernels, but unless you know exactly what you are doing you shouldn't use linked data structures.)
Actually, unlike on Windows, fwupd itself contains the code to flash firmware on various types of devices, and all the manufacturer provides is the firmware file itself.
On Windows you can (apparently) provide an arbitrary installer yourself instead. That said, theoretically a UEFI upgrade could mess with your system since that firmware ends up running on the main CPU itself.
It is also conceivable that you could have rogue firmware on some other device that can mess with the system via DMA (direct memory access). But then we are talking full on hacking, and likely unreliable across different kernel versions etc. Notably monitors don't have such access. Enabling the IOMMU should also help protect against this (since that restricts what RAM addresses each peripheral can access).
Well, they included some MPL 2.0 repos of mine at least, but skipped others that use GPL3. Yet another that is a mirror of some otherwise lost firmware files for early 2000s wifi cards (and definitely isn't free software) is also included.
So possibly they filter out GPL2/3 specifically, rather than only include known permissive licenses. Which is a pretty bad way of doing it.
For me this is a killer feature. For a start, we value atomic commits, where each commit does one small standalone thing. This makes review easier, as well as going back and looking at history to figure out why something was done the way it was. An easy to read history is critical at a large company. Commit messages are often muliline and long and describe the why and why not other alternatives that were considered.
But this also means your PR branch should have clean history, and editing said history is absolutely encouraged (even mandatory). We use azure devops and flawed as it is, the review UI handles this case well. I believe github is far worse at handling force pushes.
Review, design review and even CI runs takes time, so I often need to start building on top of a PR before it is fully finished and merged. Because I work in a sector where we have actual certifications (safety critical systems, think things like brake controllers, medical devices, etc) this means "move fast and break things" just isn't an option (nor should it be). This also slows down the PR workflow. Even after the C++ code built, you can expect a few hours to run the test suite with full physical simulations. And review can take days for larger and more critical changes.
So yes, many branches have more than one commit. And it is not uncommon to build upon yet to be merged branches (with the knowledge that small things will need to change as the followup is being rebased on top of changes of the original PR).
Another tip, to save some plastic on prototypes: if you have a paper printer you can make a technical drawing in your CAD program, set scale to 1:1, print it out and compare (make sure to measure to check that the printed size is actually 1:1). If need be use scissors to cut out the profile.
This won't take plastic shrinking into account, but in my experience it can remove the first few iterations at least. And it is way faster, and paper is less bad for the environment.
Snapshots are great for solving accidental oopses, and for getting consistent backups that reflect a single point in time. But they aren't backups. If the HDD or SSD dies snapshots don't help. If the file system gets corrupted snapshots don't help. If the file data becomes corrupt snapshots don't help (since they only store a single copy of any version of a file).
So snapshots are no substitute for backups. I run btrfs and I do backups, and I sync those backups to a remote location (look up 3-2-1 backup).
Uh, this blog says "introducing", but this is hardly new. I have seen this crate around for a while, and https://crates.io/crates/crabtime/versions corroborates that.
Is this an old blog? I can't find a date on it.
Signal is pretty good.
I strongly disagree. I'm going to quote myself from reddit here:
And from a later reply:
I found the discussion quite interesting over all: https://old.reddit.com/r/rust/comments/1qcxa9o/what_does_it_take_to_ship_rust_in_safetycritical/ (it is a shame lemmy is so much less active than reddit still).
If you don't mind using a crate: take a look at the well regarded https://lib.rs/crates/heapless (but yeah, having it in core would be nice, but might be too niche).
It isn't open source, but DaVinci Resolve is available for Linux. With limited features if you don't pay. Might be overkill for what you do, and I understand it can be finicky to get it working (needs nvidia, poor support for AMD, very limited format support unless you get the paied version, ...).
I don't really do video stuff, but I did play around with it a few years ago, and it seemed very comprehensive.
I don't use Gnome, but they hate to expose settings in general it seems and like to dumb down everything (and that is why I don't use it). The issue here is that the you need KDE, Sway, Niri, Xfce, etc all to implement a setting for this. Middle mouse paste is useful and has been standard on Unix-likes for decades. There is literally no reason to remove it.
Yeah, the Flint 3 seems like a worse overall router when it comes to computational power and chipset. The only thing it has going for it is WiFi 7 (instead of 6) and 2.5 G ethernet on all ports. The Flint 3 is also more power hungry, which isn't great given the high energy costs in Europe.
Most people don't benefit from WiFi 7 (WiFi 6 is already good enough for almost everything) and if you want more than 2x 2.5G ports, consider getting a (managed) switch to extend the router with.
No, it was your assertion that a wheel being too fiddly. It seemed quite broad (stating it as an universal truth). It might be for you, but not for most people (but you wrote it as an unqualified statement).
While that works, it will use more electricity than an all-in-one ARM based router. Depending on prices and renewable/fossil mixture where you live, this may or may not be a concern.
GL.Inet products that use Mediatek chipsets are great since you can usually flash standard OpenWRT on them. I would avoid routers with different chipsets since they are unlikely to get proper support.
(Though I can't say that my MT-6000 is cheap, but it is an extremely capable router. That is top of the line though, they have cheaper stuff.)
Not true, if there is no user visible setting for it. Changing a hidden gsetting via a command line is essentially removing it since it will likely bitrot and then be fully removed in a few years.
For many people this is a non-issue. I think this a case of just accepting we are different and don't need to force our view on everyone else.
Maybe 15 years ago I had a mouse with a tilting scroll wheel (for side scrolling), on that one I did have issues with middle click, for about a month until I got used to clicking straight down.
So maybe it is just a question of practice? Maybe not. But since both options exist there is no need to get upset.
Your link to codeberg is a 404.
I think a lot of modern software is bloated. I remember when GUI programs used to fit on a floppy or two. Nowdays we have bloated electron programs taking hundreds of MB of RAM just to show a simple text editor, because it drags a whole browser with it.
I love snappy software, and while I don't think we need to go back to programs fitting on a single floppy and using hundreds of KB of RAM, the pendulum does need to swing back a fair bit. I rewrote some CLI programs in the last few years that I found slow (one my own previously written in Python, the other written in C++ but not properly designed for speed). I used Rust, which sure helped compared to Python, but the real key was thinking carefully about the data structures used up front and designing for performance. And lots of profiling and benchmarking as I went along.
The results? The python program was sped up by 50x, the C++ program by 320x. In both cases it changed these from "irritating delay" to "functionally instant for human perception".
The two programs:
And I also rewrote a program I used to manage Arch Linux configs (written in bash) in Rust. I also added features I wanted so it was never directly comparable (and I don't have numbers), but it made "apply configs to system" take seconds instead of minutes, with several additional features as well. (https://github.com/VorpalBlade/paketkoll/tree/main/crates/konfigkoll)
Oh and want a faster way to check file integrity vs the package manager on your Linux distro? Did that too.
Now what was the point I was making again? Maybe I'm just sensitive to slow software. I disable all animations in GUIs after all, all those milliseconds of waiting adds up over the years. Computers are amazingly fast these days, we shouldn't make them slower than they have to be. So I think far more software should count as performance critical. Anything a human has to wait for should be.
Faster software is more efficient as well, using less electricity, making your phone/laptop battery last longer (since the CPU can go back to sleep sooner). And saves you money in the cloud. Imagine if you could save 30-50% on your cloud bill by renting fewer resources? Over the last few years I have seen multiple reports of this happening when companies rewrite in Rust (C++ would also do this, but why would you want to move to C++ these days?). And hyperscalers save millions in electricity by optimising their logging library by just a few percent.
Most modern software on modern CPUs is bottlenecked on memory bandwidth, so it makes sense to spend effort on data representation. Sure start with some basic profiling to find obvious stupid things (all non-trivial software that hasn't been optimised has stupid things), but once you exhausted that, you need to look at memory layout.
(My dayjob involves hard realtime embedded software. No, I swear that is unrelated to this.)
On paper they are efficient. In practise, all pointer based data structures (linked lists, binary trees, etc) are slow on modern hardware. And this effect is more important than the complexity in practise for most practical high performance code.
You are far better off with linear access where possible (e.g. vectors, open addressing hash maps) or if you must have a tree, make the fan-out factor as large as possible (e.g. btrees rather than binary trees).
Now, I don't know if Haskell etc affords you such control, I mainly code in Rust (and C++ in the past).
Also see this old thread from 2016 on hacker news about this very topic: https://news.ycombinator.com/item?id=13263275
XOR lists are obscure and cursed but cool. And not useful on modern hardware as the CPU can't predict access patterns. They date from a time when every byte of memory counted and CPUs didn't have pipelines.
(In general, all linked lists or trees are terrible for performance on modern CPUs. Prefer vectors or btrees with large fanout factors. There are some niche use cases still for linked lists in for example kernels, but unless you know exactly what you are doing you shouldn't use linked data structures.)
EDIT: Fixed spelling