I’d like to snap some third-party tools we use to make distribution easier. I have some general questions as well as some more specific (hand-wavy) ones.
Are there guidelines or etiquette on packaging other people’s applications?
For open source usually the licensing and distribution is clear. Is it considered a requirement to ask if the project is happy to have their software distributed by snap?
For closed-source projects very often distribution is verboten - there is nothing to say.
There is a class of closed-source projects with ambiguous or potentially permissive licenses. An example of this that is common (well at least 2 applications) - and related to my needs - is free (as in beer) software to support hardware that you pay for. Very commonly these have licenses like:
- only on our hardware
- we’re not responsible/not on nuclear facilities
- don’t reverse engineer
- sue us in delaware (or wherever)
Would snapping a such an application be acceptable in the store? IANAL, but distributing unmodified binaries where the license provides no hint that they oppose distribution, only for use on actual hardware (snaps can guarantee that - at least I think they can for USB VID/PIDs) seems to be exactly what is permitted.
For ambiguously licensed applications Linux is often an also-ran target so they are unlikely to package themselves, likely have legacy library dependencies (fits nicely in snaps because of that), and be unresponsive to requests from people buying less than 100 units per month.
I know the Ubuntu podcast presenters talked about snapping old, incompatible applications (at least privately). I guess that feeds into this conversation?
I think ‘graciously’ covers all the bases that are not verboten
For open source projects, the preferred approach is:
- Give a heads-up to the project, via email list or IRC or forum, that you want to explore making a snap, in case someone else is already doing the same and there is an opportunity to collaborate.
- Make a prototype
snapcraft.yaml that shows that the idea works; it may require
--classic and might be short a few interfaces, but it gets the application up in one command.
- Share that
snapcraft.yaml with the upstream community for input and testing.
- Once it works well with strict confinement, propose to land it upstream and setup an automatic build for multiple architectures via the snapcraft.io build system.
Generally, publishers are surprised by how nice it is to be able to update their users efficiently. The update rate on snaps is much, much better than other distribution methods. For people who have to support their users, it’s a blessing to have most users on the newest version.
I have learned to make a snap form someone else app, in this topic of etiquette I have some questions:
In the case I’m snapping someone else app, how should I proceed with this part in the snapcraft.yaml file:
Thinking if I going to maintain the snap package, how is the proper way to fill this?