Skip to content

Non-deterministic builds for iOS and macOS platforms #3480

@g000sha256

Description

@g000sha256

Rebuilding TDLib for iOS and macOS produces artifacts with different checksums, even when the build environment and build cache remain unchanged. Interestingly, OpenSSL builds have the same checksums.

Steps to reproduce

OpenSSL builds

cd td/example/ios
./build-openssl.sh
shasum -a 256 third_party/openssl/macOS/lib/*.a

Running this script twice produces identical checksums:

88ce8def2830675b85854e9f4655c336f76592ec98cdf253fe3735910e8e1afb  third_party/openssl/macOS/lib/libcrypto.a
743b9f5d0c5b68a3ee8d54bacd3b831fccf0e62d7d1edf4b9321c7bea6215bde  third_party/openssl/macOS/lib/libssl.a

TDLib builds

cd td/example/ios
./build.sh
shasum -a 256 build/install-macOS/lib/*.a

First run checksums:

7850935e7c0bec00a3e972bebadb8aca878ac9802e58181fd00102584a7d7a3e  build/install-macOS/lib/libtdactor.a
a5b9a7591863877b2b5466965fb7f4fc19ce5849b40965d61955da2b69167057  build/install-macOS/lib/libtdapi.a
ce1c5b9e900cd956b7dfee45bfd79cf8868d064296f4e9f1104184e7d4d1dd84  build/install-macOS/lib/libtdclient.a
8e019f90e2a6422b3ef651ec37ac98c85723fbd63dd82eb81dadc5114b76a285  build/install-macOS/lib/libtdcore.a
26aa14d3162bac098ab06c3077c701b3360b3b6e0361276f9966b12437e2a480  build/install-macOS/lib/libtddb.a
2221a43b35e26768eb5a1f642af8326718f6026d5f83e27584eec64d681f806f  build/install-macOS/lib/libtde2e.a
2819184425c185af353696d5da24fbf1f620ba9138081fee0557e0e88e14c3b8  build/install-macOS/lib/libtdjson_private.a
abfd2d89fff24b2624a1adde7c990439575d76b4e0b4779d5b0f2eb4b15996fb  build/install-macOS/lib/libtdjson_static.a
4c5d36b151a465acfeef88671ed6ad6029b79647469ed68d245d488776c8317a  build/install-macOS/lib/libtdmtproto.a
d931033d520f669960928066c186d52d533dc798fc6c0d222ef1aedd88b7dbbd  build/install-macOS/lib/libtdnet.a
0c94fbbe48d0168ea249fdc88af28247a294863287f0a76265f9a8f62748d9d3  build/install-macOS/lib/libtdsqlite.a
a5de8f9a95b0e5bafafc92dff580ca33716238bf9afef012711fe66e5f397880  build/install-macOS/lib/libtdutils.a

Second run checksums:

0135557d4ee28eb6f57e7af16caeeb1b2c3466863b4c1d596f80ca0ddf156f39  build/install-macOS/lib/libtdactor.a
3c9f9cce806f59675e9d65afbd26a0a9d37dfcc831782cbe49361b7da37b4fbc  build/install-macOS/lib/libtdapi.a
8333f3e4c1f4ce75a98f58cb7ad36184961a02ffdb7a5d9bb4839cdd809f9779  build/install-macOS/lib/libtdclient.a
ba2b28d1f651aeb2cc4f23504c3fff9f642af6e231433921522a67f19bf2b31d  build/install-macOS/lib/libtdcore.a
ed310bffab22f8fd74fa6f94c439be0617498afbdb75fd82609f4e0356f67158  build/install-macOS/lib/libtddb.a
36f80f4626ef11e18c44aad4049e3f877ea8c1f591d6f1f9f2b2397fa4897571  build/install-macOS/lib/libtde2e.a
2d91cc960620c54ef4a5f98fcb167298af1a43f047b2ce38b58b7dde00de645f  build/install-macOS/lib/libtdjson_private.a
ad6b92bed4e6fa5e75cc7d0dacd20c7e91ff31f6f7fcc0f808799263dbf2c24b  build/install-macOS/lib/libtdjson_static.a
2cbc77bcbfa1904c3b182164389160696b76ffee66aee3698d8029da95c8bb76  build/install-macOS/lib/libtdmtproto.a
e98df0cd7f494e7f4672609f7a416eb90a55322434d66c1c66e1012ad0ba004a  build/install-macOS/lib/libtdnet.a
61ef5aa46ede68c902698ee2b55ec301d51b7efa12d1887dd98a7ffc90c6e3cb  build/install-macOS/lib/libtdsqlite.a
02d0b8b7da42dca9016aad1c590fef2a87e5efc537cf1bfa4a7d330120d9220c  build/install-macOS/lib/libtdutils.a

Expected behavior

All builds should produce identical artifacts with matching checksums when source code, toolchain, and environment remain unchanged (reproducible/deterministic builds).

Actual behavior

Every TDLib rebuild for iOS and macOS produces completely different checksums for all libraries. The builds for Android and for JVM Linux are deterministic.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions