Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cross platform support? (Windows version) #166

Open
A9G-Data-Droid opened this issue Jan 6, 2022 · 5 comments
Open

Cross platform support? (Windows version) #166

A9G-Data-Droid opened this issue Jan 6, 2022 · 5 comments

Comments

@A9G-Data-Droid
Copy link

I normally use https://github.com/balena-io/etcher for cross platform image writing needs but I would prefer to use Popsicle.

Is there any interest in supporting Windows?

Would there be any resistance to me trying to get this to run on Windows?

@ids1024
Copy link
Member

ids1024 commented Jan 14, 2022

I quite like the idea of Windows support, and have thought of trying to add it. (If only so we can document Popsicle as the canonical way to create a Pop!_OS USB drive on Windows as well.)

I have a couple concerns though.

  • Packaging GTK software for Windows is generally a bit of a pain, though doable.
  • Even if it's easy now, it may be harder to have parity on Windows for future features like support for Windows ISOs (Creating bootable USB devices from Windows 10 ISOs #67)
    • That requires a way to read the contents of an iso image, partition and format a USB drive, and copy files into the new partitions. All of which may need to be done differently on Windows.
    • We wouldn't want Windows support to hold back development of features like this.

@A9G-Data-Droid
Copy link
Author

While developing the code to write Windows 10 ISOs there should be some consideration given to cross platform methods. It could be developed using preexisting cross platform tools, like 7-zip for ISO decompression. It could be decompressed directly on to target combining your "read\mount" and "copy" steps in to one step. Maybe there is a rust native way of decompressing ISOs to avoid the reliance on 7zip libraries.

I would think there must be a rust tool for cross platform disk formatting. If not, that's a useful crate to exist in it's own right. Maybe that's the next step.

@ids1024
Copy link
Member

ids1024 commented Jan 14, 2022

Maybe there is a rust native way of decompressing ISOs to avoid the reliance on 7zip libraries.

I think that library is for a different format, it just happens to be sometimes given the .iso extension since that's common for disk images. Actually, I've written a partial isofs implementation in Rust, but even if that's robust enough, if I recall correctly the Windows 10/11 ISOs actually use the newer UDF filesystem.

I would think there must be a rust tool for cross platform disk formatting. If not, that's a useful crate to exist in it's own right. Maybe that's the next step.

Could be useful. One complication is that Popsicle accesses USB drives with the udisks2 dbus API, so it doesn't require root access and can run in a Flatpak sandbox. An ideal abstraction would with with udisks2, direct operations via root access, or however Windows does things.

I've been meaning to work on better backend abstractions, using async IO. Which is more possible now that zbus 2.0 has released. But I have other projects to work on currently.

@techguy16
Copy link
Contributor

techguy16 commented Dec 10, 2022

GTK applications can run on Windows, like @ids1024 said, but they are a giant pain to get working. Popsicle uses some Linux-only libraries, so these would have to be reverse-engineered for Windows.

If you could get around these two issues, it would be possible, but you would have to maintain two versions, one for Linux, and one for Windows, because you would have to implement everything from the Linux one in Windows, so the Windows version would get features a few weeks or even a few months after the Linux version.

@mmstick
Copy link
Member

mmstick commented Dec 10, 2022

Nothing necessarily has to be reverse-engineered. Just adding code to flash devices on Windows with Windows APIs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants