Prototype for Modernized Fedora Media Writer

The ‘Save or remove download’ feature is now implemented. If the hash does not match the ISO, the file is automatically deleted for security reasons.

I would love to get your feedback on the toggle. Currently, when you hover over it while it’s active, it displays the directory where the file is saved. Should it show the absolute path instead? Note that the path is dynamic and adjusts to the local system (which is especially important for Windows).

Also, should this tooltip be fixed on the right side, or should it remain floating over the button upon hover, as it does now?

1 Like

I have optimized the binary size, though it comes at a slight cost to performance. By switching the optimization level to s, certain size-heavy optimizations were reduced. Additionally, I trimmed down imports and disabled unused features.

As a result, the Linux x86_64 binary size is now down to 17.4 MB.

However, the runtime memory footprint has increased slightly. While we could potentially save another 5 MB, doing so would severely impact execution speed and require disabling some security features. Alternatively, removing the custom allocator would save about 0.5 MB, but it would double memory latency (halving performance).

On a positive note, the PNG assets were highly optimized, saving an additional 1 MB.

1 Like

Awesome! Apologies for the delay in responding, I think the download checkbox is great there.

I like that the path is dynamic (great point about Windows) – personally I’d like to see (and possibly edit) the full path chosen, perhaps that could fit to the right of the save checkbox?
Idk if a drop-down to change the location / path would be too cluttered (I’m really not good at design stuff, but I do pay attention to people with “less obvious use-case requirements”).

That’s perfect too! I hope it states that it’s “verifying checksums” for your security etc. Especially as It can sometimes take a while and it’s nice to have feedback, but also good to be explicit about why this is a better tool for creating media.

And as to the question of where to put link for “Fedora Everything” Net Installer (from previous message), - I’d suggest on the “Official Editions” screen, then it’s just a click through to the architecture, just like the others (but I’m aware that 5 options breaks the current symmetry so :man_shrugging: ) https://us1.discourse-cdn.com/fedoraproject/original/3X/2/2/2266ef2212dffbcfc870fabb00fb81b1fac24807.png

Hopefully some of the guys from earlier in the thread will chime in with more encouragement and ideas / suggestions, though they may be distracted by Flock at present.

1 Like

@lozenge Thanks for the feedback. The chooser was my first idea as well. I think it looks a bit bad and cluttered there are just too many things on the screen.

I verify the hash when the flasher receives it and then again after flashing. If either of these checks fails, the flasher quits and displays whether the first or second hash check caused the problem. I have seen this happen myself, but in any case, I programmed it so that the flasher aborts. This is a non-recoverable error, and the user must start the flashing process again.

Edit:

I know the error messages need more information for the end user and have in the moment not much information.

Thanks, I briefly skimmed through the recent updates. As I am still in Flock To Fedora 2026, it would be a while to get back to you after testing these changes. But keep it up :tada: - this looks super amazing!

I have an idea for an addition. On the first startup, there should be an option for either manual selection or a guide. The guide is primarily targeted at new users and should display two pictures asking which GUI they prefer. Then, it should ask if it is on this PC, or explain how to find the architecture out (like Googling the CPU architecture). After pre-selecting, they would only need to click one button. This should help users without a specific purpose or idea get started. If a user chooses the manual option, the guide will be permanently hidden but can be enabled in the settings again.

Need Feedback!!

The binary can be compressed down to 5.4 MB with UPX using moderate settings, if a smaller size is needed and a startup penalty of half a second is acceptable.

1 Like

As some comments under the posts said, the official SVG isn’t very good(for first sidebar button). Does anyone have a better idea?

Youre doing awesome.
Once you have the technical bones finished, we can easily replace any svg that need it before release.

(Last day of Flock yesterday, all Flocked out! Will think more later).

The Windows Backend got more rusty idiomatic and the icon is now there. The admin rights is asked from the program now and if dev build shows the dev logo.

@lozenge The net installer are now there and find the first page a good place for it.

1 Like

Fantastic! Thank you @mythicbyte .

@t0xic0der @theprogram @lozenge @ngompa

Good News

I have good and bad news. The good news first: the macOS program now works without a problem. I tested it on macOS 26. All three platforms are now working! I added a configuration that works on every platform and stores the last‑used theme and language. The logs on Linux are forwarded to journald. On Windows they go to etc (not compiled at the moment; only a native Windows compile is possible due to header problems with MSVC). The error message does not include the actual error message. More themes are available for Linux than for Windows or macOS. When there is no internet, releases display a helpful message and a way to try fetching them again. The app is in a production‑ready state regarding technical aspects. The fun things is the macos size is the smalles, followed from the windows version and then linux. Linux takes with the dbus connection a good part of space, vs the other use native api directly(the access to journald take good space aswell).


Bad news

The bad news: on macOS the custom header does not work at the moment. There is a problem in the WebGPU backend from Rust for transparent elements, or macOS has some issues. I cannot fix this with another version. Windows uses Vulkan; DirectX 11 also works, but not the new DirectX 12. This is a known problem.This is why Windows runs vulkan and not dx 12. Therefore, on macOS the custom header bar has been removed and the native macOS system bar is used. The minimize, maximize, and close buttons are hidden and the Apple versions are used. If the bug is resolved we can return to the normal layout. Without the fix, where the rounded corners end, a black box appears around the window. The main work now is the languages; only English works well at the moment. Some text‑alignment problems still need to be fixed to look good. On macOS no icon is included at the moment; this needs to be fixed.

Size

  • Linux: 18,6 mb
  • Windows: 14,8 mb
  • Macos:13,6 mb

Conclusion

All in all, the technical challenge is complete, and making a better experience for the user is now the priority.

Macos



Linux Themes


The themes with linux in the name work only on linux.(Striped at compile time if the target is windows or macos).
The language can be changed here too.


Error Message Example

There are coming from debugging macos.


see errorpopup.rs for more info.


Normal look



Ideas to implement

  • better accessibility when libcosmic evolvs
  • notifications
  • icon in the taskbar
  • better blur
  • macos icon
  • macos connect to log output central
  • Make after the verification a better message for the user
  • discuss if app can be panic = “abort”
  • windows, macos read theme dark or light and change at first startup(linux dbus conflict do not recommended)

Try out

https://gitlab.com/MythicByte/new-writer/-/releases

Why is this a Rust libcosmic application instead of a Qt+QML one? We already have the infrastructure and maintainers for that version, and this kind of theming is possible with QML.

@ngompa I understand what you mean. I have no experience with Qt, except for trying it once when it either didn’t work or looked bad. I bet it was a skill issue, but I haven’t tried it since.

The primary reason is that I am already familiar with the iced GUI toolkit. I learned the basics of Rust Iced in my free time, and using libcosmic feels like a more mature option.(libcosmic is build on iced)

Benefits

I have no issues with cross-platform portability out of the box. Plus, I don’t need to deal with a massive Qt dependency tree.

Negatives

It is not as optimized yet and still has some rough edges. Incomplete features like animations require a lot of work, which I took the time to implement myself (they will be made better in the upcoming release updates).

The Rust Problem

Whenever I build a new, complex application, I choose Rust every time. C and C++ are inherently memory-unsafe, and I simply dislike C++.

However, the problem with Rust graphics frameworks is that those using inter-language bindings are a pain to work with. I previously experimented with GTK4 Rust bindings for an app that never shipped, the GNOME documentation really needs to improve, and the lack of clear guidance forced me to drop the project. There was too much boilerplate, and Rust’s safety guarantees often went out the window.

Instead, I prefer pure Rust alternatives—the best options for desktop GUIs being Iced and Slint. Slint is similar to Qt (made by former Qt developers), production-ready, highly mature, and features a QML-like style. I chose Rust Iced because that is what libcosmic is mostly built on, and it offers much better theming and integration with the Linux desktop.

Rust Iced builds the UI directly in Rust code, allowing the compiler to check it. While this is a lot of work, it eliminates many bugs before they can happen. State mutation is strictly separated from the UI and can only be modified via messages, which are native enums in Rust.

I really like Rust Iced from an architectural standpoint. It builds into a single application of a reasonable size and works across all three major operating systems. Because it has commercial backing, it should have a solid future.

Alternative Approach

If libcosmic really cannot be used, I can rebuild the UI in Slint. I will not write Qt bindings myself, but someone else is welcome to do so. I have written the Rust backend to be completely abstracted, meaning another developer can just hook into it and only needs to write the UI layer.

Question

Fedora has a COSMIC spin, which I currently use. There must be a packaging infrastructure for it already, or am I wrong? I could maintain the project binaries myself, but I have no idea how to go about doing that yet.

Performance

The app can be compressed down to 5.9 MB using upx --lzma --best /target/release/new-writer. For comparison, the Fedora Media Writer (an animated Qt application) is 2.1 MB on my Fedora 44 stable system. The new gui advanced i expect that the binary size will double or triple the binary size, a Qt GUI is inherently heavier than what I have now. I find the compressed size really good and don’t think a Qt version could beat it.

At idle, my application uses 20 MB less memory. During a workload like flashing an image, my application uses 70 MB less memory than the native media writer.

Funny

I tested this using the UPX-compressed version. Funnily enough, the UPX version used 1 MB less memory than the uncompressed one—I have no idea why. Ultimately, the memory overhead with or without UPX is nearly identical and not really noticeable.

This is a weird take, since Rust applications have way larger dependency graphs.

Then use Rust with Qt. That’s been an option for quite some time. KDE maintains bindings for it.

Iced does not itself have commercial backing, and is anti-developer. Even if you take COSMIC into account (which itself forks iced for its own purpose for this and other reasons), Qt has significantly more commercial backing, and more presence in more communities.

There is a very big difference between packaging and developing an application. We have a significantly larger pool of people who can contribute to a Qt application than an Iced-based application. We don’t really have many who can work on Iced/COSMIC apps.

This is not necessarily true either. You’ve admitted to not knowing much about Qt so please don’t make such assertions.

Sorry for my language is meant that the shared libarys need to be present. Which are quite big if i now this right.

I meant that with interlanguage bindings. I would never create my own to much work.

I think to name that anti developer is a bit harsh. You have point i now to get going is difficult and i find it good that he published that. So every body nows what to expect and what not. I think the gap with libcosmic will this made be better over time. I don’t now the docs to qt, but the gnome docs are not that good.

Good point like i said i have no how much work goes into that.

Your are right i have no not much, but do you have a better idea how much space such a application would take ? I only tried to argue that the size is good for how much is in such a program and that it would be difficult for qt get to the same size. If i’am wrong i appreciate the feedback.

They don’t have to be. Since Fedora Media Writer is a GPLv3+ application, we can easily statically link everything if we want to. We choose not to because it simply doesn’t matter for the supported deployment methods (RPM, Flatpak, Apple DMG, and Windows installer). We could additionally support more methods (AppImage, Snap, ExeBundle, etc.) if there was a need for it.

The Qt documentation is probably the best in this space. With reference documentation and tutorials both equally well-written out (as well as good first-party developer tools), being successful with Qt is significantly easier than with other toolkits.

Fedora Media Writer is already smaller than most of its contemporaries since we do not use Electron and bundle a whole Chromium browser. There are ways to make it even smaller, but I don’t think it’s strictly necessary nor a useful metric for the application as we’re at a fairly reasonable size right now.

2 Likes