Skip to content

[Bughunt Phase 5] Decide the fate of stale language bindings (Java/Matlab/R, untouched since 2022) and triage related open issues #295

Description

@grzanka

Found during a full bughunt/architecture review. Unlike #290#294, this phase is primarily a maintainer decision rather than an engineering task — filing it so the decision is tracked and the affected issues are cross-linked.

Binding staleness, verified via git log

Java:       last touched 2022-12-07
Matlab:     last touched 2022-12-07
R:          last touched 2022-12-07
Python:     last touched 2022-12-07
Linux(deb): last touched 2022-12-07
JavaScript: last touched 2024-08-20
  • Java: distributions/Java/webstart/*.jnlp ships Java Web Start launch files. Web Start was removed from the JDK in Java 11 (2018) and dropped from all major browsers years ago — this binding cannot currently be used as documented.
  • Matlab: no CI coverage, no verification it still builds against current MATLAB/mex toolchains.
  • R: the package was removed from CRAN on 2019-09-03 (already stated candidly in README.md), yet distributions/R/generator is still a live git submodule (.gitmodules) being fetched on every full clone, and libamtrack R package installation fails #90 ("libamtrack R package installation fails") has been open since 2020 with no resolution.
  • Python (pyamtrack): more actively maintained than the others per the website docs, but missing port of pyamtrack for MacOSX #216 ("missing port of pyamtrack for MacOSX") has been open since 2023.

Carrying these as if they were supported implies a support burden that, per the commit history, isn't actually being met — that's arguably worse for users than clearly marking them unmaintained.

Proposed decision (pick one per binding, doesn't have to be uniform)

  • Java: given Web Start's removal from all runtimes, either replace the distribution mechanism entirely (plain JAR + runme.java, dropping webstart/) or move to contrib//mark unmaintained
  • Matlab: add a minimal CI smoke build, or mark unmaintained
  • R: given the CRAN removal was over 6 years ago and libamtrack R package installation fails #90 is unresolved, mark unmaintained and drop the ReGenerator submodule dependency from routine clones (it currently costs every contributor a submodule fetch for a binding that doesn't install)
  • JavaScript/WASM: most actively touched of the group and has CI coverage (webassembly-reusable.yml) — no action needed here beyond the generation-tooling item below

WASM export-list generation is fragile

distributions/JavaScript/parse_headers.py builds the exported-symbol list for compile_to_js.sh by splitting header lines on whitespace and checking split_line[0] in ["int","double","long","void"] — a formatting change from clang-format (which pre-commit already runs against these same headers, per .pre-commit-config.yaml) could silently change what gets exported, with no build failure to flag it. Currently only 64 of 382 public functions are exported, from a hand-maintained list inside compile_to_js.sh. This script also appears to be unused already (see #155, "Fix javascript generation script", open since 2021).

  • Replace the whitespace-splitting parser with a real C parser (pycparser or a libclang-based script) driven directly off include/*.h, or retire parse_headers.py if Fix javascript generation script #155 means it's already dead, and document which of the two (compile_to_js.sh's inline list vs. parse_headers.py) is actually the source of truth

Cross-reference: open issues now diagnosable from this review

For the maintainer's triage convenience, these existing open issues have a concrete root cause identified during this review:

Acceptance criteria

  • Each binding in distributions/ has an explicit, documented maintenance status (maintained / unmaintained / removed)
  • The WASM export list has a single documented source of truth
  • Cross-referenced issues above are either closed as duplicates/resolved by the phase work, or explicitly kept open with an updated description reflecting the new context

Related: #90, #97, #124, #125, #155, #216, #258, #268, #278, #287, #57, #161

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions