Deterministic builds?

Ulrich Spörlein uqs at
Fri Oct 22 10:01:41 UTC 2010

On Thu, 21.10.2010 at 21:50:26 +0200, Erik Cederstrand wrote:
> Den 21/10/2010 kl. 19.57 skrev Ulrich Spörlein:
> > On Mon, 11.10.2010 at 11:35:42 +0200, Erik Cederstrand wrote:
> >> I'm beginning to think that it should at least be optional. Removing e.g. build times, mtimes and path to OBJDIR or SRCDIR might not make everyone happy.
> > 
> > The problem with making it optional is, that we already have enough
> > flags and knobs. No need in adding more.
> > 
> > Besides, why would people want to know the date of the build? Far more
> > important is the date and state of the source for the time of build. So
> > you might want to replace ${BUILDATE} with ${SRCDATE} somehow (time of
> > last commit?).
> > 
> > Otherwise, please go for it. It would be nice if two people compiling
> > GENERIC for the same source-base would get identical binaries.
> It goes without saying that I agree with you on this. But it seems the feature will require fairly invasive changes to a standard FreeBSD, e.g. changing standard ar behavior, and building kernels and some other tools without debugging symbols. I'm not experienced enough to determine if this is fine with the majority of users, but hiding the changes under a knob would at least let the feature prove itself and put off bikeshedding for a while. If the project works out, we can discuss changing the default.
> I'm still not sure what to do with debugging symbols. Currently absolute paths to source files are used. I would like to change that to absolute paths , i.e. usr.bin/ar/ar.c. That might even be beneficial if someone is debugging the binary on a system that doesn't have the source tree located in /some/obscure/directory/src. It's my understanding that gdb uses the path to look up source code related to stack traces etc. It seems gdb can handle relative paths, but I have no idea if it actually works, or if it's a nuisance to use compared to absolute paths. Any hints?

Why do you make this a requirement? Of course it's usually easier to
build different releases from different source directories, but I think
requiring the following conditions are fine:

1. If you build a specific svn revision,
2. sitting in /usr/src with
3. the default make.conf (ie., no special flags, no frobbing of OBJDIR)
4. at different times

then you get the same binaries.

Let's start with an achievable, not-so-intrusive goal, right? :)


More information about the freebsd-hackers mailing list