Git Product home page Git Product logo

ducible's Issues

Add tests

A number of test cases need to be added to verify that builds are indeed deterministic. This will involve building every set of sources files twice and comparing the checksums to verify they are identical. The negative case also needs to be tested. That is, modifying a source file should affect the output and produce non-identical files.

The plan is to write this test suite in Python as we already have a dependency on it.

Make PDB builds reproducible

Currently, PDB files are not patched to remove non-determinism.

This presents a larger challenge than just patching the PE file alone, because:

  1. The PDB file format is not well documented.
  2. The size of the PDB file seems to change with every build. Thus, we cannot use a memory map to make modifications to the PDB file as we will need to remove data.

References:

  1. https://github.com/Microsoft/microsoft-pdb

use hash of input file instead of fixed timestamp

The timestamp of a DLL seems to have at least some kind of role as a unique identifier that is relevant to the loader. Using the same timestamp for different versions of a DLL might introduce weird side effects.

Instead, the timestamp should be set to the hash of the input file to guarantee a unique value, see https://devblogs.microsoft.com/oldnewthing/20180103-00/?p=97705 which describes that Windows 10 DLLs now also use a hash of the file as a timestamp.

No version.h in source tarballs

The source tarballs (or at least v1.2.1.tar.gz) have no version.h, so make tries to configure version.h.in, which fails because there is no git checkout.

Source tarballs are important for projects that package binaries such as Linux distributions or MSYS2. They are more prone to include a package that is built from a source tarball that corresponds to a version number. Packages built from version control checkouts are frowned upon because that is a sign of instability.

Known Limitations - Digitally Signed Executable

Hello I have a problem. We have the original .exe and .pdb file of an application we released - that was digitally signed due to being released to customer desktops. Now the application randomly crashed and we have a dump file from the crash.

Now my question is does that mean there is no way for us to look at the dump file because the exe was digitally signed or is there some way around this with the help of your tool or in general?

Incremental build fails due to PDB being different

When building incrementally, the linker fails with the error LNK1209: program database 'foo.pdb' differs from previous link; relink or rebuild.

This could be caused by a number of reasons, one being that the resulting PDB is simply not valid. The linker may also keep information about the state of the PDB separately (maybe in the .ilk file). This needs to be researched more.

Relative object file paths in the PDB

This is part feature request/part question.

Even after running the DLL and PDB through ducible, I found that the PDB hashes would differ, so the PE hashes would also differ, leading to cache misses.
Turns out that the linker writes out absolute paths to .obj files in the module info substream!
This is particularly obvious across different developer machines where their usernames are different.

Have you considered adding support to replace those with relative or fake absolute paths?
Do you know if there are any downsides of doing something like that?

Add support for static libs.

Hi Jason,

First, I would like to warmly thanks you for this program. We added ducible to our build pipeline and it is a huge gain of time while debugging.

I would like to know if it is possible to make ducible work for .lib file? AFAIK it is generating a pdb as well, that has the same limitations as the .dll one.

Thank you for your time!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.