<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><font color="#000000" face="Calibri,sans-serif">FYI, roslyn made the switch to being deterministic by default in April last year: <a href="https://github.com/dotnet/roslyn/commit/04462c44e30dfa91267581abdb029f3102796486">https://github.com/dotnet/roslyn/commit/04462c44e30dfa91267581abdb029f3102796486</a></font><BR> <BR><font color="#000000" face="Calibri,sans-serif">Quoting from the commit:</font><BR><font color="#000000" face="Calibri,sans-serif">"(1) The timestamp in the header is replaced with 0 (which is specifically allowed by the spec)<br> (2) The module version ID Guid (Mvid) is computed by hashing the contents of the generated assembly (with zero<br>      where the Mvid will go for the purposes of computing the hash)</font><BR><font color="#000000" face="Calibri,sans-serif"></font> <BR><font color="#000000" face="Calibri,sans-serif">The name of the "private implementation details" class no longer includes the Mvid."<br id="FontBreak"></font><BR>-- Alex<br> <BR><div>> From: jeroen@sumatra.nl<br>> To: dkg@fifthhorseman.net; mono-devel-list@lists.ximian.com; marek.safar@gmail.com<br>> Date: Tue, 17 Feb 2015 11:12:14 +0000<br>> CC: henrik@logibit.se; directhex@apebox.org; reproducible-builds@lists.alioth.debian.org<br>> Subject: Re: [Mono-dev] making mono builds reproducible (xamarin bz #26842)<br>> <br>> Hello all,<br>> <br>> I'm not a big fan of using an environment variable for this, but I won't oppose it. In the mean time, I've added a new public API (ModuleBuilder.__PEHeaderTimeDateStamp) to specify the time stamp. There is already a public API to specify the module version GUID.<br>> <br>> As Miguel said, hard coding the GUID violates the spec and can lead to weird problems. I think the proper solution is to base the GUID on a SHA1 of the contents of the assembly. However, this is non-trivial, so it will take some time to develop a complete solution. This will be an opt-in feature, so it will also need to be supported by mcs or an environment variable.<br>> <br>> Marek, what do you think about adding an mcs switch to facilitate reproducible builds?<br>> <br>> Regards,<br>> Jeroen<br>> <br>> > -----Original Message-----<br>> > From: Daniel Kahn Gillmor [mailto:dkg@fifthhorseman.net]<br>> > Sent: Monday, February 16, 2015 23:20<br>> > To: mono development list<br>> > Cc: Jeroen Frijters; Jo Shields; Debian Reproducible Builds; Henrik<br>> > Feldt<br>> > Subject: making mono builds reproducible (xamarin bz #26842)<br>> > <br>> > Hi Mono folks--<br>> > <br>> > some good discussion has come up on the xamarin bugtracker about being<br>> > able to make builds using the mono toolchain reproducible:<br>> > <br>> >    https://bugzilla.xamarin.com/show_bug.cgi?id=26842<br>> > <br>> > Jo Shields offered a one-liner fix to PEWriter.cs to allow the use of an<br>> > environment variable to fix the timestamp epoch, but made it clear that<br>> > more feedback is needed, so i'm raising it here:<br>> > <br>> > from:<br>> > <br>> >    public DWORD TimeDateStamp = (uint)(DateTime.UtcNow - new<br>> > DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;<br>> > <br>> > to:<br>> > <br>> >    public DWORD TimeDateStamp =<br>> > Environment.GetEnvironmentVariable("IKVM_WRITER_TIMESTAMP_EPOCH") !=<br>> > null ?<br>> > <br>> > uint.Parse(Environment.GetEnvironmentVariable("IKVM_WRITER_TIMESTAMP_EPO<br>> > CH")) :<br>> >                                 (uint)(DateTime.UtcNow - new<br>> > DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;<br>> > <br>> > (i'm not sure whether the integer number of seconds is the best form for<br>> > the environment variable, or whether it would be better to parse a<br>> > standard date string -- from debian's perspective, we can deal with<br>> > either, of course)<br>> > <br>> > And this still doesn't solve the secondary issue of the assembly GUID,<br>> > as Jo noted.<br>> > <br>> > Any thoughts about how to best enable binary-reproducible builds from<br>> > the mono toolchain if the invoker requests them?<br>> > <br>> > Regards,<br>> > <br>> >         --dkg<br>> _______________________________________________<br>> Mono-devel-list mailing list<br>> Mono-devel-list@lists.ximian.com<br>> http://lists.ximian.com/mailman/listinfo/mono-devel-list<br></div>                                    </div></body>
</html>