What are the differences and/or similarities between tito, rpmbuild and fedpkg tools for packaging a modern fedora desktop app?

Hello, i have been working on a desktop app and wanted it to release it as a .rpm package and want to host it on the fedora packages repository.

I came across multiple packaging tools which does the same job based on my little experience I have, and I would like ask the experts

  1. what are the latest guidelines on packaging a modern app for fedora? which might be cross-platform in future

  2. why are there so many packaging tools, doing approximately the same thing like tito, rpmbuild, fedpkg ? what are the similarities and differences ? Which one works the best (in most situations)

  3. What are the requirement(s)/guidelines to host a package on official fedora packaging repository, dev channel ?

1 Like
  1. The official Fedora Packaging guidelines are here: Fedora Packaging Guidelines :: Fedora Docs

  2. There are so many tools because people have different ideas of how to improve things, and since it’s open source, they go and make them. In specific for the ones you’ve asked about:

  • rpmbuild is the low-level tool that’s part of rpm itself for constructing packages.

  • fedpkg is our official helper tool which wraps rpmbuild plus a bunch of other tools in a handy suite useful for maintaining an official Fedora package

  • tito is a newer tool to do basically the same thing, in slightly different ways.

    You probably should have a basic understanding of rpmbuild, but in practice as a Fedora maintainer, you don’t need to touch it directly very often (similarly, koji and bodhi command line tools exist, but they’re generally not necessary to worry much about).

    Another emerging tool that takes a slightly different approach is PackIt, which is meant for building software directly from your upstream source repository (on Gitlab or Github or whereever). It also wraps the standard Fedora build process, but in a different way, which you may find easier if

    • you’re also the developer of the software and owner of the upstream source repository, and/or if you are
    • you’re someone who grew up (or grew into being) more comfortable with git than with extracting and managing tar.gz files.
  1. See:
  • Joining the Package Maintainers :: Fedora Docs

  • New Package Process for New Contributors :: Fedora Docs

    for the process.

    Generally, a good first step is to build the package into Copr, which doesn’t require you to go through all that process. So you can start making the package available, learn how to do it, get initial feedback, etc., and then move to make the package official when it (and you!) are ready.

    There’s a Quick Start guide for adding a package to Copr at How to Publish your Software on Copr, Fedora’s User Repository :: Fedora Docs. (This guide happens to use tito.)

    Oh, and on “dev channel” — in some ways, that’s Copr. Our main “development” branch, which is called “Rawhide” for obscure historical reasons, is entirely branched into our new release branches twice a year. So, everything that goes in there should be getting ready to be in production use. It’s really more “staging” than it is “dev”. See Updates policy :: Fedora Docs for policies around different Fedora repository branches.