We want to make diffoscope the universal diff software. We want to add new features to diffoscope which are currently available in other diffing software. Diffoscope can be used as a replacement or way better than Open Build Service's pkg-diff,Whisper Systems apkdiff etc. At present, Diffoscope don't have option to hide (or ignore) specific differences as per user requirements. This is a specification for --hide=profiles which allows Diffoscope to hide certain profiles.

Disclaimer for Debian reproducible-builds users: Please note that hiding differences should only be used for analysing (other) reproducibility issues, which are hidden through the noise. The goal of reproducible builds is to have bit by bit identical builds, it's not ok to say "these two are identical if you hide $this"…


The goal behind creating --hide=profiles specification is to allow diffoscope users to hide details which they don't want to see.

Use cases

Ignore `.buildinfo` files when comparing `.changes` files

Metadata generated by gzip

Example difference

Ignore all differences in control.tar

Related bug #797525

Hiding debug symbols

Example difference Example difference

Ignoring specific fields in .buildinfo files

Hiding timestamps generated by latex

Example difference

Ignoring mtimes

Ignoring build profiles

Helmut is trying to cross build packages reproducibly. Since some packages need additional dependencies under cross builds, he adds the cross build profile. Unfortunately, build profiles are always recorded in the binary package's control file in the Built-For-Profiles header. Beyond the cross build profile, there are more profiles that are supposed to leave the resulting binary packages unchanged (e.g. nocheck or noudeb). Having this hiding mechanism would help validating the correctness of these build profiles.

Ignoring directories

Jane is reviewing her package upload and using diffoscope to compare the old and new versions of a Debian source package. Since the upstream version was bumped, the directory name within the upstream tarball was changed from foo-0.1/ to foo-0.2/. The fuzzy matching takes care of most of the noise here but there is still some noise in the output. Being able to ignore top-level directory renames would help reduce that to just the changes made to the upstream source code and the debian/ directory.