Skip to content

Releases: BALL-Project/ball

BALLView v1.7.1

21 May 10:36

Choose a tag to compare

Installers built from this tag.

  • macOS: download the .dmg, double-click to mount, drag BALLView.app to /Applications. Signed + notarized (Phase 8a) — no Gatekeeper prompt expected on macOS 14+ / macOS 26+. If the cert is still pending procurement, the .dmg ships unsigned: right-click → Open → confirm on first launch, or run xattr -dr com.apple.quarantine /Applications/BALLView.app once.
  • Windows: download the .exe installer (NSIS, per-user install to %LOCALAPPDATA%\Programs\BALLView — no admin/UAC required). Windows SmartScreen will warn on first run until the SignPath Foundation OSS signing cert lands (Phase 8b). Click More info → Run anyway to proceed. See packaging/windows/README-SMARTSCREEN.md for the full guide + integrity verification flow.
    Windows installer SHA256: e8a2b19e955274d9e6adb1f68c856a67f7afa94c276e4ba09e2c63bb09b79ec7
    A portable .zip (extract-and-run, no installer) is also available for users who don't want a Start Menu entry.

Build from source: see BUILD-macos.md (macOS), the GitHub Actions CI workflow at the same tag for the Linux + Windows recipes.

  • Linux: four artifacts per arch (x86_64 + arm64): .AppImage (portable, double-click to run — bundles Qt 6.8 + plugins via linuxdeploy; remember chmod +x then ./BALLView-*.AppImage), .deb (Debian / Ubuntu 24.04+; sudo apt install ./BALLView-*.deb), .rpm (Fedora 40+ / RHEL / openSUSE; sudo dnf install ./BALLView-*.rpm), and a portable .tar.gz (extract-and-run, requires system Qt 6.8+). All Linux SKUs are LGPL — FFTW is intentionally absent (no GPL relicensing). See BUILD-linux.md for build-from-source instructions and .planning/phases/08c-packaging-linux/08c-FFTW-GPL-DECISION.md for the GPL rationale.

BALLView v1.7.0

19 May 18:20

Choose a tag to compare

Installers built from this tag.

  • macOS: download the .dmg, double-click to mount, drag BALLView.app to /Applications. Signed + notarized (Phase 8a) — no Gatekeeper prompt expected on macOS 14+ / macOS 26+. If the cert is still pending procurement, the .dmg ships unsigned: right-click → Open → confirm on first launch, or run xattr -dr com.apple.quarantine /Applications/BALLView.app once.
  • Windows: download the .exe installer (NSIS, per-user install to %LOCALAPPDATA%\Programs\BALLView — no admin/UAC required). Windows SmartScreen will warn on first run until the SignPath Foundation OSS signing cert lands (Phase 8b). Click More info → Run anyway to proceed. See packaging/windows/README-SMARTSCREEN.md for the full guide + integrity verification flow.
    Windows installer SHA256: 09a76e8f15cbe7488d8cbfacbb7dbe3eaefbe3ff069de9c30a5f5bb835c713ff
    A portable .zip (extract-and-run, no installer) is also available for users who don't want a Start Menu entry.

Build from source: see BUILD-macos.md (macOS), the GitHub Actions CI workflow at the same tag for the Linux + Windows recipes.

  • Linux: four artifacts per arch (x86_64 + arm64): .AppImage (portable, double-click to run — bundles Qt 6.8 + plugins via linuxdeploy; remember chmod +x then ./BALLView-*.AppImage), .deb (Debian / Ubuntu 24.04+; sudo apt install ./BALLView-*.deb), .rpm (Fedora 40+ / RHEL / openSUSE; sudo dnf install ./BALLView-*.rpm), and a portable .tar.gz (extract-and-run, requires system Qt 6.8+). All Linux SKUs are LGPL — FFTW is intentionally absent (no GPL relicensing). See BUILD-linux.md for build-from-source instructions and .planning/phases/08c-packaging-linux/08c-FFTW-GPL-DECISION.md for the GPL rationale.

BALLView v1.6.2

17 May 11:41

Choose a tag to compare

BALLView v1.6.2 — warning-cleanup + ARM Linux + Qt 6.8 LTS baseline

Status: finalized 2026-05-17 — ready for v1.6.2 git tag (triggers release.yml artifact build).

v1.6.2 is a corrective + hygiene release for v1.6.1. Same binary surface, same supported platforms, no new user-facing features. The headlines are: Qt 6.8 LTS as the new project floor (enables ARM Linux desktop binaries), ARM Linux (ubuntu-24.04-arm) added to the CI matrix as a blocking peer of x86_64, and the Windows MSVC + Linux gcc warning surfaces cleared from ~4 000 to under ~10. Plus several latent bug fixes flushed out by the warning census (chief among them: a real va_start undefined-behavior site in PDBFile::writeRecord_ that had been latent in the PDB writer since the codebase was first targeted at C++17, and four QFile::open() discarded-bool sites where failure was silently producing zero-byte downloads).

If you're on v1.6.1, upgrading to v1.6.2 is recommended but optional — v1.6.1 functions correctly; v1.6.2 is cleaner and more diagnosable.


What's new in v1.6.2

Qt 6.8 LTS as the project-wide floor

QT_MIN_VERSION bumped from 6.5 → 6.8 LTS across all platforms. The bump was driven by ARM Linux: aqtinstall has no Linux ARM64 desktop binaries for Qt 6.5 / 6.6 / 6.7 — they were first published with Qt 6.8 LTS (October 2024). Pinning x86_64 to 6.8 too keeps the toolchain uniform across the matrix and enables consistent use of Qt 6.8+ APIs (QDomDocument::ParseOptions, QMouseEvent::globalPosition, etc.).

Build implications:

  • macOS: Homebrew Qt 6.11+ satisfies the floor (no action required).
  • Linux x86_64 + ARM64: CI installs Qt 6.8.3 via jurplel/install-qt-action; users on Ubuntu 24.04 whose apt-shipped Qt is 6.4.2 will need to install Qt 6.8+ separately.
  • Windows: vcpkg pulls Qt 6.8+ via the existing manifest.

ARM Linux (ubuntu-24.04-arm) added to CI as a blocking platform

The CI matrix grew a fourth blocking build job: build (linux-arm64) on ubuntu-24.04-arm (free standard GitHub-hosted runner since late 2024). Two consecutive green runs (25963533636 + 25963900386) established the ARM baseline on the new Qt 6.8 floor, after which the entry was flipped from blocking: falseblocking: true to match linux-x64 / macos-arm64 / windows-x64. ARM-specific regressions (alignment, byte-order, char-signedness defaults, pointer-truncation under LP64-vs-LLP64 differences) are now caught at PR time.

The first ARM regression caught and fixed by this matrix entry was the -Wnarrowing error on hashGrid.C's neighbour-offset table — ARM gcc defaults char to UNSIGNED, so the -1 literals in the 27×3 table tripped -Wnarrowing errors that x86_64 (signed char default) had never seen. Fix: declare the table as signed char (commit fdea8c7). Cross-platform, no behavior change.

CI cycle-time and signal improvements

  • paths-ignore for docs commits. Push/PR triggers now skip the full 4-OS rebuild for .planning/**, **.md, doc/**, and LICENSE* changes (saves ~45–60 min of runner time per ROADMAP/CLAUDE.md/docs commit). Source dirs remain in-scope by default — the list is a deny-list, not allow-list.
  • macOS runner version aligned with OpenMS (macos-14 / Sonoma) for known-stable parity; Windows bumped windows-2022windows-2025 (VS 2022 17.x with current MSVC 14.4x).
  • Per-TU build profiling. Top-20 slowest TUs step added to each platform (Phase 999.19-01); ninja-log artifact uploaded with each build for offline regression analysis. SIGPIPE-on-sort | head pipefail bug fixed so the telemetry step never silently fails a blocking job.
  • Windows CMake build-tree cache (Phase 999.17-01) — separate from ccache; caches the configure step's output across runs, cutting Windows job time meaningfully on warm cache.
  • GitHub Actions bumps (Phase 999.20-01) — actions/upload-artifact@v4 → v6, actions/download-artifact@v4 → v7. Both are pre-emptive bumps before the Node 20 deprecation deadline.

Warning-surface cleanup (massive)

The pre-v1.6.2 warning census measured ~4 000 warnings on linux-arm64, ~2 400 on linux-x64, ~1 800 on macos-arm64, ~700 on windows-x64 (already low after Phase 5.1). v1.6.2 cuts every platform to under ~10 actionable warnings (the residual being intentional [[deprecated]] markers on GENETICDOCK self-deprecated classes that the v2.0 cleanup phase will address).

The fixes split across two parallel work streams, both folded into v1.6.2:

Stream A — file-by-file warning category execution (commits 5ef5509, d77aab3, 94fcd73, 85d991d, 3519c34, cb392cc, c947b2d):

  • -Wcatch-value → catch polymorphic BALL::Exception::* by const& instead of by value (5ef5509, d77aab3) — 35 sites
  • Latin-1 source bytes → ASCII in TODO comments (94fcd73) — fixes MSVC C4828 source-encoding warnings
  • sprintf / vsprintfsnprintf / vsnprintf across all platforms (85d991d) — fixes Apple SDK deprecation advisory + general security improvement
  • -Woverloaded-virtual sweep on QSAR simpleBase.h subclasses (3519c34, c947b2d) — adds using SimpleBase::operator=; to ~40 derived classes, killing the largest single warning category (~2 800 hits on Linux ARM64)
  • Init-list reorder + dead-write removal + empty-body-loop clarification (5ef5509)
  • GCC -Wmaybe-uninitialized false-positive suppression on system headers (cb392cc)

Stream B — codex-reviewed shortlist execution (commits c6ecd48, 82dba3c, 24c044f, d730518, 0a75ede):

  • c6ecd48 — Codex CLI adversarial-review-approved P0+P1 bundle: 11 fixes across 18 files
    • P0: PDBFile::writeRecord_ va_start UB. The function declared void writeRecord_(PDB::RecordType, ...), but the C++ standard's va_start macro requires the anchor parameter to be a type that does not undergo default argument promotion. Enums can be int-promoted, which is undefined behavior per [cstdarg]. Real latent bug — happened to work on x86_64 gcc/clang/MSVC but UB everywhere. Fix: change signature to void writeRecord_(int record_type, ...), cast back to the strong enum after va_start for switch + format-table lookups. Callers unchanged (enum constants implicitly convert to int).
    • P1: Defaulted copy-assign on iterator templates. (Const)BidirectionalIterator + (Const)RandomAccessIterator had user-provided copy ctors but no user-provided copy-assign, triggering -Wdeprecated-copy on ~740 template instantiations. Added Class& operator=(const Class&) = default; to all four.
    • P1: Qt 6 mechanical migrationsQMouseEvent::globalPos()globalPosition().toPoint() (6 sites), QByteArray::count()size() (6 sites in simpleDownloader.C), QDomDocument::setContent 5-arg → ParseOptions overload returning ParseResult (2 sites), QMenu::addAction(text, recv, slot, accel)(text, accel, recv, slot) (4 sites).
    • P1: Smaller cleanupskekulizer.h AtomInfo default-init all members; glRenderer ctor mem-init reorder to match declaration order; drop dead pm.createAlphaMask() × 2 sites; fold QTranslator::load() [[nodiscard]] result; Hash_test.C char*const char*.
  • 82dba3c — Windows MSVC trio: silence C4834 in simpleDownloader.C:134 (real latent bug — discarded QFile::open() bool was producing zero-byte downloads with no diagnostic), add cross-platform -DBOOST_BIND_GLOBAL_PLACEHOLDERS (silences Boost 1.73+ global-placeholder deprecation), pin -D_WIN32_WINNT=0x0A00 on Windows (was defaulting to Windows 7 / 0x0601 with a pragma message).
  • 24c044f — Sweep 5 sibling C4834 sites missed by the original census: dockResultFile.C:586,594,602 (truncated docking-file output on open failure) + downloadPDBFile.C:125 + downloadElectronDensity.C:167 (zero-byte temp files → cryptic downstream parser failures). All applied with the same Log.error()-on-failure pattern.
  • d730518GL_SILENCE_DEPRECATION on macOS VIEW target: Apple deprecated all of OpenGL system-wide in 10.14 (2018); BALL's renderer stays on fixed-function GL until the v2.0 Metal/MoltenVK migration (ROADMAP Phase 999.6 PIPE-01). Apple's documented escape hatch. Eliminated ~1 500 deprecation warnings on macOS.
  • 0a75ede — C4267 narrowing mop-up: 3 sites where size_t was implicitly narrowing to BALL::Index (32-bit on Windows LLP64). Explicit static_cast<Index>(container.size()) at CIFFile.C:447, binaryFingerprintMethods.C:1618, conformationSet.C:46.

Coverage build now green for the first time (Phase 999.27 — commits 78ecda5, 2497369, b98b63a): three defects that were causing the non-blocking coverage (Linux, gcov, non-blocking) job to fail on every push. Root cause was simpler than originally guessed — BALL_VIEW_DEBUG=TRUE is gated on CMAKE_BUILD_TYPE STREQUAL "Debug", which the coverage job sets and the regular Linux job does not, so the offending unqualified endl (networkPreferences.C:44) only compiles under coverage. First green coverage run: 25968988067.

Test suite gatekeeper now blocking on macOS + Linux (Phase 9)

The test/ tree has been wired into ctest since v1.6.0 (commit b2bb718), but the gatekeeper ran with continue-on-error: true — test failures surfaced as JUnit artifacts but didn't fail CI. v1.6.2 flips the gatekeeper to blocking on macos-arm64 + linux-x64 + linux-arm64 (Phase 9 close, TEST-CLOSE-02, commits 866723427 + sibling edits to release.yml).

Pre-flip, the three known baseline failures from PHASE-9-BASELINE.md were triaged per 09-TRIAGE.md:

Test Disposition Commit
Directory_test KNOWN-PASSING — false alarm; passes when BALL_DATA_PATH is set 45d66a4
AmberFF_test FIX — loosened additivity tolerance to PRECISION(200.0) (ARM FP drift = 141 units) 41bfae6
AssignBondOrderProcessor_test2 QUARANTINEWILL_FAIL TRUE Apple-arm64-only (Linux passes); fine-penalty algorith...
Read more

BALLView v1.6.1

16 May 11:45

Choose a tag to compare

Unsigned best-effort installers built from this tag.

  • macOS: download the .zip, unzip, drag BALLView.app anywhere. Gatekeeper will block on first launch — right-click → Open → confirm, or run xattr -dr com.apple.quarantine BALLView.app once before launching.
  • Windows: download the .zip, extract. Windows SmartScreen will warn — choose "More info → Run anyway".

Both binaries are not code-signed or notarized. That work is Phase 8 ("Packaging & Distribution") in the roadmap.

Build from source: see BUILD-macos.md (macOS), the GitHub Actions CI workflow at the same tag for the Linux + Windows recipes.

Linux: build from source — no Linux installer in this release.

BALLView 1.6.0 — modernized foundation (macOS arm64)

15 May 17:01

Choose a tag to compare

⚠️ SUPERSEDED — please use v1.6.1

v1.6.0 is left tagged for historical reference. It shipped with three known issues that are resolved in v1.6.1:

  1. macOS BALLView.app had empty Info.plist version stringsCFBundleVersion, CFBundleShortVersionString, CFBundleLongVersionString were blank. macOS preferences / sandbox identity / future notarization (Phase 8) all rely on these.
  2. The release pipeline (release.yml) was pinned to Qt 5 — it still installed qt@5 via Homebrew and called qt@5/bin/macdeployqt. Phase 5's Qt 6 migration of the codebase had left release.yml behind, so any re-release attempt would have failed at CMake configure.
  3. Persisted ~/.BALLView config silently shadowed compiled element / residue color defaults — even editing the in-source defaults and rebuilding had no visible effect if any saved config existed. The only workaround was deleting ~/.BALLView. Phase 4.1 fix in v1.6.1.

v1.6.1 also carries Phase 5.1 (warning-census cleanup across all three toolchains: C4717 getline recursion, C4311 pointer truncation, C4251 STL-member-in-DLL noise, -Wself-assign-field, -Wformat-overflow, …), Phase 999.2 (Ninja build generator) and Phase 999.16 (precompiled-header support). Download v1.6.1 instead of v1.6.0 unless you specifically need this archival tag.


v1.6.0 — modernized foundation release. This tag marks Phase 4 (Dependency System Overhaul) complete: BALL and BALLView build green on macOS arm64, Linux x64, and Windows x64 from modern toolchains with no reliance on the dead ball_contrib tree.

What's in this release

  • Modern toolchain: C++17, CMake 3.21+, Boost 1.x, Eigen3 (config-mode), TBB (config-mode), OpenBabel 3.x, FFTW, GLEW, lp_solve, libsvm, flex, bison
  • Cross-platform CI: GitHub Actions matrix (macOS arm64 + Linux x64 + Windows x64 + legacy-GL grep gate); render-smoke checks on macOS and Linux
  • C++17 codebase: legacy bind2nd/mem_fun/unary_function/binary_function fully removed; Boost.Regex POSIX C ABI replaced with the modern boost::regex C++ API
  • Rendering: QOpenGLWidget-based GLRenderWindow with compatibility-profile fixed-function GL; renderer/surface boundary (Phase 02.1) extracted as the contract for the future Phase 5 / PIPE-01 backend swap

What's NOT in this release

  • Qt 6 migration — Phase 5, coming in v1.7
  • Renderer-pipeline rewrite to QRhi or modern GL-corePIPE-01, v2; spike scoped in Phase 5
  • Code signing or notarization on the binaries — Phase 8 scope (SignPath Foundation locked for Windows, Apple Developer ID + notarytool for macOS)
  • Python bindings — Phase 6

Binaries

⚠️ Unsigned best-effort installer

This release ships an unsigned macOS arm64 .app as a best-effort starting point. Apple Gatekeeper will block the first launch — workaround:

  1. Right-click `BALLView.app` → Open → confirm in the dialog
  2. Or run once before first launch: `xattr -dr com.apple.quarantine BALLView.app`

A future v1.6.x point release will ship signed + notarized binaries once Phase 8 is implemented.

Why no Windows installer in this release

The Windows build through the unsigned release workflow (run 25908337693) hit a linker error: `LNK1104: cannot open file 'tbb12_debug.lib'`. Root cause is a CMake-build-config mismatch (multi-config Visual Studio generator defaults to Debug when `--config Release` isn't passed; the `x64-windows-release` vcpkg overlay triplet only builds Release variants, so the Debug lib isn't there to link). The fix is a one-line workflow change tracked as Phase 5.1 Tier D Task D4. The Windows installer will follow in a v1.6.0.1 / v1.6.1 / v1.7.0 release once that's landed and (preferably) Phase 8 signing too.

Linux

No Linux installer in this release — build from source via the recipes in the CI workflow or adapt BUILD-macos.md (the apt deps are documented in the Linux CI step).

Build from source

See `BUILD-macos.md` at the tag for the macOS-Homebrew recipe. Linux + Windows from-source recipes are in `.github/workflows/ci.yml`.

Verification

This release tag points at commit `a839729`. Source compiles green on all three platforms — verified by CI run 25899905204 on the equivalent source state (`6056f74`).

🤖 Built by GitHub Actions release workflow (`release.yml`). Co-authored by Claude Opus 4.7.