xref: /trunk/AOO-trunk.md (revision 27dee00ef8b391d4d520b7edb65b4093b02f83ed)
1<!--
2 Licensed to the Apache Software Foundation (ASF) under one
3 or more contributor license agreements.  See the NOTICE file
4 distributed with this work for additional information
5 regarding copyright ownership.  The ASF licenses this file
6 to you under the Apache License, Version 2.0 (the
7 "License"); you may not use this file except in compliance
8 with the License.  You may obtain a copy of the License at
9
10   http://www.apache.org/licenses/LICENSE-2.0
11
12 Unless required by applicable law or agreed to in writing,
13 software distributed under the License is distributed on an
14 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 KIND, either express or implied.  See the License for the
16 specific language governing permissions and limitations
17 under the License.
18-->
19
20# trunk vs AOO42X — Functional Difference Analysis
21
22**Date:** 2026-06-08
23**Repository:** apache/openoffice
24**Branches compared:** `trunk` (future 4.5.x / "dev") vs `AOO42X` (the 4.2.x release branch)
25
26---
27
28## 1. Summary
29
30| | trunk | AOO42X |
31| --- | --- | --- |
32| Branch tip | `9d1a529d5e` | `4ccec83d37` |
33| Tip commit subject | *Fix crash, uninitialized-return, and buffer bugs…* | *(same)* |
34| Common ancestor | `a341bc611d` (2019-01-09) | (same) |
35| Commits ahead of merge-base | 2933 | 2486 |
36| Commits with **no patch-equivalent** on the other side | 711 | 318 |
37| **Python baseline** | **3.10.18** | **2.7.18** |
38| Apple Silicon (arm64) support | yes | yes |
39| Win64 native UNO C++ bridge | **yes** | **no** |
40
41### Headline findings
42
431. **No functional capability exists in AOO42X that is missing from trunk.** Every
44   functional AOO42X-only commit was verified to be present in trunk (most under a
45   different commit hash because of whitespace/pre-commit divergence — see §2).
46   The 318 "AOO42X-only" commits by patch-id are almost entirely **release-branch
47   bookkeeping** (version/build-number bumps, copyright-year updates, SVN-era
48   `Merge rNNNNN from trunk` backports) plus **spelling / pre-commit whitespace**
49   commits that were applied to AOO42X in a different order than trunk.
50
512. **The two branches are functionally very close.** The vast majority of the 711
52   trunk-only commits are **non-functional**: ~270 are cleanup/typo/spelling/whitespace,
53   plus a large block of README/help/translation/graphics-asset updates and test-tree
54   reorganization. Most genuinely-functional work (editeng 32-bit paragraph indices,
55   WebDAV→curl port, dynamic OpenSSL, gbuild port of pyuno/ure, AdoptOpenJDK detection,
56   frame-toolbar fix) has **already been merged to AOO42X** via squash/merge commits and
57   is present on both branches. The Python file-editing/embedding base feature was merged
58   to both branches on the same day (2026-05-24) as parallel commits (`4bb26738ff` trunk,
59   `c779acf6cb` AOO42X), but trunk has since accumulated ~10 additional post-merge
60   improvements to that feature that are not yet on AOO42X (see §3a).
61
623. **The single biggest functional divergence is the platform baseline:**
63   trunk targets **Python 3.10** and ships a **native 64-bit Windows UNO bridge**
64   (`msvc_win64_x86-64`); AOO42X deliberately stays on **Python 2.7** and has **no
65   Win64 bridge**. These are intentional release-stability decisions, *not* missing
66   cherry-picks (cf. the explicit AOO42X commit *"revert the Python 3.10 changes,
67   keep arm64 support"*).
68
694. A **small set of discrete bug fixes is genuinely trunk-only and is suitable for
70   cherry-pick** to AOO42X (see §3).
71
72---
73
74## 2. Why the commit counts overstate the divergence
75
76`git cherry`/patch-id reports 711 trunk-only and 318 AOO42X-only commits, but most are
77*not* real functional gaps:
78
79- **Pre-commit whitespace hooks.** trunk adopted `pre-commit` end-of-file-fixer,
80  trailing-whitespace, and mixed-line-ending hooks and ran them across the whole tree
81  (PRs #255–#478). AOO42X ran an equivalent but separately-ordered set. This reformats
82  thousands of files, so the *same logical change* produces *different patch-ids* on the
83  two branches and shows up as "unique" on both sides.
84  - Example: the X11 autoscroll-cursor fix (`assw_curs.h`) appears unique to AOO42X, but
85    the actual hex byte values are **identical** to trunk — only the per-line formatting
86    (tabs, bytes-per-line) differs.
87
88- **Release bookkeeping (AOO42X side).** Build-number pre-allocation, `Update copyright
89  year to 2022…2026`, `Bump up revision after tagging DevN`, MSI version strings, and
90  SVN-era `Merge rNNNNN from trunk` commits dominate the AOO42X-only list.
91
92- **Squash/merge re-landing.** Large features were merged into AOO42X as single squash
93  commits (e.g. `c779acf6 Merge branch 'python-editing-embedding'`,
94  `08fafdc14b AOO42X: revert the Python 3.10 changes, keep arm64 support`), so the
95  individual trunk commits that compose them never match by patch-id even though the
96  resulting source is identical.
97
98### Functional AOO42X-only commits — all verified present in trunk
99
100| AOO42X commit | Verified in trunk as |
101| --- | --- |
102| WebDAV provider serf/apr → curl (`9646dec`) | `51ba086bf1` (+ follow-ups `e469ab6`, `f7b97bf`, `88ba7bc`…) |
103| OpenSSL built as dynamic library (`e350def`) | `8eb9a7e66a`, `0ca5b4b7b8` |
104| editeng 32-bit paragraph indices (PR #164) | `d5edfd0976` + full series; `GetParagraphCount()` returns `sal_uInt32` on both |
105| SpreadsheetML `ss:DateTime` import (`48b860b`) | `195282cf3d` |
106| SpreadsheetML R1C1→A1 column bug (`0f570a5`) | `577fe17932` |
107| ODF `covered-table-cell` / `ss:MergeAcross=0` (`b9aa069`) | `a896732bfc` |
108| icu module parallel build fix (`93c12e1`) | `17604d2661` |
109| APR 1.6.x upgrade / Xcode12 (`316716d`) | `b1dc36c016` |
110| Basic single-line-if comment test #i126272 (`3b5ec47`) | `07758af81c` |
111| Tab function test document (`a1409b3`) | `3b297b4615` |
112| X11 / OS/2 / macOS pointer & cursor corrections | byte-identical in trunk (whitespace-only diff) |
113| macOS SDK / C++ build tweaks (`0e91ffb`, `3d8a723`) | superseded by trunk's newer arm64 `configure.ac` |
114| beanshell d.lst path/version (`2aea6da`, `2dbdbb8`) | identical `bsh-2.1.0.jar` mapping in trunk |
115
116**Conclusion for the "no regression" requirement: PASS.** AOO42X contains nothing
117functional that trunk lacks.
118
119---
120
121## 3. Trunk-only functionality SUITABLE for cherry-pick to AOO42X
122
123These are discrete, self-contained, low-risk fixes confirmed by file-content diff to be
124trunk-only (the touched file genuinely differs between the branches), and they do **not**
125depend on the Python-3 or Win64 baseline.
126
127### 3a. Recommended cherry-picks (bug fixes)
128
129| Area | trunk commit(s) | What it fixes | Risk |
130| --- | --- | --- | --- |
131| **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 |
132| **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. | Lowmedium |
133| **Win64 portabilityfile 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) |
134| **Win64 portabilitytime_t** | `926379c890` | `rsc` preprocessor used a 32-bit-capped `long` for `time_t`; use native `time_t`. (`rsc/source/rscpp/cpp3.c`) | Low |
135| **i18n unit tests** | `de76a5a`…`cc5c65fb` | New/relocated i18n JUnit API tests under `test/testuno/source/api` (11 files, absent on AOO42X). | None (test-only) |
136| **`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 |
137| **`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 |
138| **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) |
139
140> Note: the *frame-toolbar-missing-in-Writer* fix (`6bd5b10f`, `1714b106`),
141> AdoptOpenJDK/Java>1.8 detection (`2bf1cfb`, `779db4a`), and the Python
142> file-editing/embedding *base* feature were **checked and are already present on
143> AOO42X** — do **not** re-cherry-pick those. The `xdg-email`, claws-mail, and
144> post-merge Python fixes listed above are **not** present on AOO42X.
145
146### 3b. Build-system / infrastructure (cherry-pick only if AOO42X wants the same CI)
147
148| Area | trunk commit(s) | Notes |
149| --- | --- | --- |
150| **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. |
151| **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`). |
152
153### 3c. NOT suitable for cherry-pick (intentional baseline / release-policy decisions)
154
155| Item | trunk | AOO42X | Why not |
156| --- | --- | --- | --- |
157| **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. |
158| **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. |
159| Boost / `-std=gnu++98` Clang build tweaks (`8ef8ad0`) | applied | n/a | Tied to trunk's toolchain modernization. |
160| Various version-string / build-number / dev-build branding | trunk = 4.5.x line | AOO42X = 4.2.x line | Branch-identity, must stay divergent. |
161
162---
163
164## 4. Largest divergence areas (by changed-file count, `git diff trunk AOO42X`)
165
166```
1672310  main/qadevOOo      <- test framework migration (trunk: JUnit/Ant; AOO42X: legacy)
168  28  main/filter        <- mostly whitespace + the SpreadsheetML fixes (§3a)
169  26  main/jurt          <- JUnit test ports
170  25  main/test          <- gbuild/Google-Test port
171  23  main/bridges       <- Win64 bridge (§3c) + whitespace
172  21  main/forms         <- JUnit complex-test cleanup
173  13  main/connectivity
174  11  test/testuno       <- new JUnit api tests (§3a)
175  11  main/solenv
176  10  main/vcl           <- pointer assets (whitespace) + Win64
177  10  main/bean          <- Win64 fixes for main/bean
178```
179
180The dominant `qadevOOo` delta is **test-infrastructure modernization**, not product
181functionality. End-user behavior of the two branches is nearly identical apart from the
182Python runtime and Win64 availability.
183
184---
185
186## 5. Methodology
187
1881. `git merge-base trunk AOO42X` → common ancestor `a341bc611d` (2019-01-09, the 4.2.x
189   branch point).
1902. `git cherry -v AOO42X trunk` / `git cherry -v trunk AOO42X` → patch-id-unique commits
191   in each direction (711 / 318).
1923. Filtered out non-functional commits (cleanup, whitespace, spelling, pre-commit,
193   copyright/version bumps, merges, README/translation/graphics) → ~434 trunk-only
194   "signal" commits, manually triaged.
1954. For every functional AOO42X-only commit, verified presence in trunk by **commit
196   message search and by file-content diff** (`git diff -w trunk AOO42X -- <file>`),
197   distinguishing whitespace-only differences from real ones.
1985. Confirmed key baselines directly from source: `main/python/pyversion.mk`
199   (`PYMAJOR` 3 vs 2), `main/bridges/source/cpp_uno/` directory listing (Win64 bridge),
200   editeng `GetParagraphCount()` signature, pyuno gbuild `.mk` presence.
201
202*All commit hashes in this document were resolved against the working tree on 2026-06-08.*
203