1# trunk vs AOO42X — Functional Difference Analysis 2 3**Date:** 2026-06-08 4**Repository:** apache/openoffice 5**Branches compared:** `trunk` (future 4.5.x / "dev") vs `AOO42X` (the 4.2.x release branch) 6 7--- 8 9## 1. Summary 10 11| | trunk | AOO42X | 12|---|---|---| 13| Branch tip | `9d1a529d5e` | `4ccec83d37` | 14| Tip commit subject | *Fix crash, uninitialized-return, and buffer bugs…* | *(same)* | 15| Common ancestor | `a341bc611d` (2019-01-09) | (same) | 16| Commits ahead of merge-base | 2933 | 2486 | 17| Commits with **no patch-equivalent** on the other side | 711 | 318 | 18| **Python baseline** | **3.10.18** | **2.7.18** | 19| Apple Silicon (arm64) support | yes | yes | 20| Win64 native UNO C++ bridge | **yes** | **no** | 21 22### Headline findings 23 241. **No functional capability exists in AOO42X that is missing from trunk.** Every 25 functional AOO42X-only commit was verified to be present in trunk (most under a 26 different commit hash because of whitespace/pre-commit divergence — see §2). 27 The 318 "AOO42X-only" commits by patch-id are almost entirely **release-branch 28 bookkeeping** (version/build-number bumps, copyright-year updates, SVN-era 29 `Merge rNNNNN from trunk` backports) plus **spelling / pre-commit whitespace** 30 commits that were applied to AOO42X in a different order than trunk. 31 322. **The two branches are functionally very close.** The vast majority of the 711 33 trunk-only commits are **non-functional**: ~270 are cleanup/typo/spelling/whitespace, 34 plus a large block of README/help/translation/graphics-asset updates and test-tree 35 reorganization. Most genuinely-functional work (editeng 32-bit paragraph indices, 36 WebDAV→curl port, dynamic OpenSSL, gbuild port of pyuno/ure, AdoptOpenJDK detection, 37 frame-toolbar fix) has **already been merged to AOO42X** via squash/merge commits and 38 is present on both branches. The Python file-editing/embedding base feature was merged 39 to both branches on the same day (2026-05-24) as parallel commits (`4bb26738ff` trunk, 40 `c779acf6cb` AOO42X), but trunk has since accumulated ~10 additional post-merge 41 improvements to that feature that are not yet on AOO42X (see §3a). 42 433. **The single biggest functional divergence is the platform baseline:** 44 trunk targets **Python 3.10** and ships a **native 64-bit Windows UNO bridge** 45 (`msvc_win64_x86-64`); AOO42X deliberately stays on **Python 2.7** and has **no 46 Win64 bridge**. These are intentional release-stability decisions, *not* missing 47 cherry-picks (cf. the explicit AOO42X commit *"revert the Python 3.10 changes, 48 keep arm64 support"*). 49 504. A **small set of discrete bug fixes is genuinely trunk-only and is suitable for 51 cherry-pick** to AOO42X (see §3). 52 53--- 54 55## 2. Why the commit counts overstate the divergence 56 57`git cherry`/patch-id reports 711 trunk-only and 318 AOO42X-only commits, but most are 58*not* real functional gaps: 59 60- **Pre-commit whitespace hooks.** trunk adopted `pre-commit` end-of-file-fixer, 61 trailing-whitespace, and mixed-line-ending hooks and ran them across the whole tree 62 (PRs #255–#478). AOO42X ran an equivalent but separately-ordered set. This reformats 63 thousands of files, so the *same logical change* produces *different patch-ids* on the 64 two branches and shows up as "unique" on both sides. 65 - Example: the X11 autoscroll-cursor fix (`assw_curs.h`) appears unique to AOO42X, but 66 the actual hex byte values are **identical** to trunk — only the per-line formatting 67 (tabs, bytes-per-line) differs. 68 69- **Release bookkeeping (AOO42X side).** Build-number pre-allocation, `Update copyright 70 year to 2022…2026`, `Bump up revision after tagging DevN`, MSI version strings, and 71 SVN-era `Merge rNNNNN from trunk` commits dominate the AOO42X-only list. 72 73- **Squash/merge re-landing.** Large features were merged into AOO42X as single squash 74 commits (e.g. `c779acf6 Merge branch 'python-editing-embedding'`, 75 `08fafdc14b AOO42X: revert the Python 3.10 changes, keep arm64 support`), so the 76 individual trunk commits that compose them never match by patch-id even though the 77 resulting source is identical. 78 79### Functional AOO42X-only commits — all verified present in trunk 80 81| AOO42X commit | Verified in trunk as | 82|---|---| 83| WebDAV provider serf/apr → curl (`9646dec`) | `51ba086bf1` (+ follow-ups `e469ab6`, `f7b97bf`, `88ba7bc`…) | 84| OpenSSL built as dynamic library (`e350def`) | `8eb9a7e66a`, `0ca5b4b7b8` | 85| editeng 32-bit paragraph indices (PR #164) | `d5edfd0976` + full series; `GetParagraphCount()` returns `sal_uInt32` on both | 86| SpreadsheetML `ss:DateTime` import (`48b860b`) | `195282cf3d` | 87| SpreadsheetML R1C1→A1 column bug (`0f570a5`) | `577fe17932` | 88| ODF `covered-table-cell` / `ss:MergeAcross=0` (`b9aa069`) | `a896732bfc` | 89| icu module parallel build fix (`93c12e1`) | `17604d2661` | 90| APR 1.6.x upgrade / Xcode12 (`316716d`) | `b1dc36c016` | 91| Basic single-line-if comment test #i126272 (`3b5ec47`) | `07758af81c` | 92| Tab function test document (`a1409b3`) | `3b297b4615` | 93| X11 / OS/2 / macOS pointer & cursor corrections | byte-identical in trunk (whitespace-only diff) | 94| macOS SDK / C++ build tweaks (`0e91ffb`, `3d8a723`) | superseded by trunk's newer arm64 `configure.ac` | 95| beanshell d.lst path/version (`2aea6da`, `2dbdbb8`) | identical `bsh-2.1.0.jar` mapping in trunk | 96 97**Conclusion for the "no regression" requirement: PASS.** AOO42X contains nothing 98functional that trunk lacks. 99 100--- 101 102## 3. Trunk-only functionality SUITABLE for cherry-pick to AOO42X 103 104These are discrete, self-contained, low-risk fixes confirmed by file-content diff to be 105trunk-only (the touched file genuinely differs between the branches), and they do **not** 106depend on the Python-3 or Win64 baseline. 107 108### 3a. Recommended cherry-picks (bug fixes) 109 110| Area | trunk commit(s) | What it fixes | Risk | 111|---|---|---|---| 112| **Calc / MS Excel 2003 XML import** | `d10bb11432` | Importing references to **columns 677–702** (and beyond) was wrong: the old XSLT used a `÷26 − 1` scheme instead of base-26² (676). Touches `spreadsheetml2ooo.xsl`. | Low — isolated XSLT + test doc | 113| **Calc / Excel 2003 XML export** | `b045a72b`, `3714104178`, `50f8b0f2cf` | Use the correct `of:`/`ooow:` namespace and R1C1 form when exporting ODF formulas to Excel 2003 XML; allow exporting ODF <1.2 formulas. | Low–medium | 114| **Win64 portability — file handles** | `5a41e572de` | `SvStream::GetFileHandle()` returns `sal_uInt32` capped at 32 bits; widen to support 64-bit Windows. (`tools/inc/tools/stream.hxx`, `strmunx.cxx`) | Low (also benefits non-Win64) | 115| **Win64 portability — time_t** | `926379c890` | `rsc` preprocessor used a 32-bit-capped `long` for `time_t`; use native `time_t`. (`rsc/source/rscpp/cpp3.c`) | Low | 116| **i18n unit tests** | `de76a5a`…`cc5c65fb` | New/relocated i18n JUnit API tests under `test/testuno/source/api` (11 files, absent on AOO42X). | None (test-only) | 117| **`senddoc.sh` — xdg-email** | `a946b6b` | On \*nix, call `xdg-email` to send emails when `MAILER` is unset. The 42-line block is entirely absent from AOO42X's `senddoc.sh` (55-line diff confirmed). | Low — shell script only | 118| **`senddoc.sh` — claws-mail** | `14c7d0b586` | Add claws-mail as a recognised mailer in `senddoc.sh`. Same file, same low risk as xdg-email entry above. | Low — shell script only | 119| **Python editor post-merge fixes** | `a7a66e361b`, `8e23be7474`, `1a9bb40f52`, `1b85a9366d`, `d2cc3a1ab9`, `36f82a9eeb`, `511d7659d6` | ~10 commits improving the Python file-editing/embedding feature landed on trunk after the parallel 2026-05-24 merge. Includes: fixed-width font in editor, `pop()`/`del` key-error fix, module-cache reload fix (ZIP timestamp bug), PythonScriptProvider marked active. | Low–medium (evaluate as a group) | 120 121> Note: the *frame-toolbar-missing-in-Writer* fix (`6bd5b10f`, `1714b106`), 122> AdoptOpenJDK/Java>1.8 detection (`2bf1cfb`, `779db4a`), and the Python 123> file-editing/embedding *base* feature were **checked and are already present on 124> AOO42X** — do **not** re-cherry-pick those. The `xdg-email`, claws-mail, and 125> post-merge Python fixes listed above are **not** present on AOO42X. 126 127### 3b. Build-system / infrastructure (cherry-pick only if AOO42X wants the same CI) 128 129| Area | trunk commit(s) | Notes | 130|---|---|---| 131| **gbuild port** of `pyuno`, `ure`, `packimages`, `apple_remote`, `qadevOOo`, `test`, `testgraphical` | `1c25f25`, `453cfdf`, `147182f`, `e2cbcf0`, `62e2780`, `19ee18f`… | Large; trunk migrated dmake→gbuild for these modules. AOO42X already received the pyuno/ure `.mk` files via merge, but the **JUnit/Ant test migration in `qadevOOo` is the single largest divergence** (2310 files): trunk moved tests into `test/testuno` + JUnit; AOO42X keeps the legacy `qadevOOo/objdsc` CSV-driven framework. Migrating this to a release branch is **high-effort and not recommended** mid-release. | 132| **pre-commit hooks + GitHub Actions linter** | `cc42a29`, `4ae038e`, `819addb`, `ffa4afe`, `98279f3` | trunk's `.pre-commit-config.yaml`, codespell word-list, `actions/checkout@v6`, `actions/cache@v5`. AOO42X already backported an equivalent set (`f30d168 Backport pre-commit and CI configuration from trunk`). | 133 134### 3c. NOT suitable for cherry-pick (intentional baseline / release-policy decisions) 135 136| Item | trunk | AOO42X | Why not | 137|---|---|---|---| 138| **Python 3.10 baseline** | `PYMAJOR=3 / 3.10.18` | `PYMAJOR=2 / 2.7.18` | AOO42X **explicitly reverted** the Py3.10 change (`08fafdc14b`) to keep the 4.2.x release on Python 2.7. Cherry-picking would change the shipped runtime. | 139| **Native Win64 UNO C++ bridge** (`msvc_win64_x86-64/`) | full directory present | directory **absent** | A whole new architecture target (`b146d3b`, `b7f28a5`, `4844d31`, `2cf0c06`, `d35e03c`, `8a51f61`…). New platform support belongs in a feature release, not a maintenance branch. | 140| Boost / `-std=gnu++98` Clang build tweaks (`8ef8ad0`) | applied | n/a | Tied to trunk's toolchain modernization. | 141| Various version-string / build-number / dev-build branding | trunk = 4.5.x line | AOO42X = 4.2.x line | Branch-identity, must stay divergent. | 142 143--- 144 145## 4. Largest divergence areas (by changed-file count, `git diff trunk AOO42X`) 146 147``` 1482310 main/qadevOOo <- test framework migration (trunk: JUnit/Ant; AOO42X: legacy) 149 28 main/filter <- mostly whitespace + the SpreadsheetML fixes (§3a) 150 26 main/jurt <- JUnit test ports 151 25 main/test <- gbuild/Google-Test port 152 23 main/bridges <- Win64 bridge (§3c) + whitespace 153 21 main/forms <- JUnit complex-test cleanup 154 13 main/connectivity 155 11 test/testuno <- new JUnit api tests (§3a) 156 11 main/solenv 157 10 main/vcl <- pointer assets (whitespace) + Win64 158 10 main/bean <- Win64 fixes for main/bean 159``` 160 161The dominant `qadevOOo` delta is **test-infrastructure modernization**, not product 162functionality. End-user behavior of the two branches is nearly identical apart from the 163Python runtime and Win64 availability. 164 165--- 166 167## 5. Methodology 168 1691. `git merge-base trunk AOO42X` → common ancestor `a341bc611d` (2019-01-09, the 4.2.x 170 branch point). 1712. `git cherry -v AOO42X trunk` / `git cherry -v trunk AOO42X` → patch-id-unique commits 172 in each direction (711 / 318). 1733. Filtered out non-functional commits (cleanup, whitespace, spelling, pre-commit, 174 copyright/version bumps, merges, README/translation/graphics) → ~434 trunk-only 175 "signal" commits, manually triaged. 1764. For every functional AOO42X-only commit, verified presence in trunk by **commit 177 message search and by file-content diff** (`git diff -w trunk AOO42X -- <file>`), 178 distinguishing whitespace-only differences from real ones. 1795. Confirmed key baselines directly from source: `main/python/pyversion.mk` 180 (`PYMAJOR` 3 vs 2), `main/bridges/source/cpp_uno/` directory listing (Win64 bridge), 181 editeng `GetParagraphCount()` signature, pyuno gbuild `.mk` presence. 182 183*All commit hashes in this document were resolved against the working tree on 2026-06-08.* 184