Progress in Q4 was slower than anticipated, but there have been some notable success in achieving BeeWare's overall project goals. As always, this roadmap should be read as a guide to what we aim to focus on over the coming quarter, rather than a hard commitment of features that will be made available on a specific deadline.
Q4 progress
Our goal for Q4 was to have at least one third-party package producing Android and iOS packages as part of their release process. We were unable to achieve this goal, for four reasons.
Firstly, we underestimated the chain of downstream dependencies that needed to be addressed before it would be possible to submit mobile packaging PRs to upstream projects. We correctly identified pip and cibuildwheel as two projects that would need to be updated; however, we didn't anticipate that those projects would themselves have upstream dependencies and issues that would require patching. The process of coming up to speed with the development tooling of multiple upstream projects, navigating the review processes of each of those projects, and sequencing changes over multiple projects so they are easier to merge has taken much longer than we anticipated.
Secondly, we underestimated how much work would be needed on the target projects themselves to make them ready for mobile support. We picked Pillow as one of our target projects because of its complex chain of binary dependencies. However we soon discovered that the way those binary dependencies were compiled for macOS required significant alteration before working on an iOS patch would be possible.
Third, the release of Xcode 16 included an unexpected surprise - it broke the mechanism we were using to gather results from test suites running on the iOS simulator. This required a significant change in CPython; however, as a result, we now have a much better mechanism for collecting test results, and the test harness the CPython uses to run its own tests can now be used to run test suites for any other Python project.
Lastly, we were presented with an opportunity to work closely with the PyScript team on web support, to the benefit of both projects. This redirected some of the resources that we originally anticipated would be used for Android binary packaging. However, it does mean that some significant improvements to Toga's web backend have been made, with more on the horizon in the new year.
Despite these challenges, we have made significant progress. pip now includes full support for iOS wheel tags. The patch adding a major feature to cibuildwheel that is a pre-requisite for iOS support has been accepted; we've been told this patch should be merged within days. We've submitted changes to Pillow that allow macOS builds to be completely isolated from Homebrew, and the patches required to support cross-platform builds of Pillow's binary dependencies have been merged. This leaves 2 patches that need to be merged - a patch to cibuildwheel adding support for building on iOS; and the patch to Pillow adding an iOS build configuration. These patches have been prepared, and are mostly ready for submission upstream; using these patches, it is possible to fully build and test Pillow wheels for iOS with cibuildwheel.
Q1 priorities
In Q1, we will continue to work on binary packaging for mobile platforms. We will continue to work on landing the patches to cibuildwheel and Pillow for iOS support; once that work has concluded, we hope to start making the analogous changes required to support Android.
Q1 will also see the continuation of our collaboration with PyScript. The major focus for BeeWare in this work will be Toga's Web backend - and in particular, Toga's testing infrastructure. We're not currently able to run Toga's testbed project on the web backend (or the Textual backend, for that matter). We have some ideas for how this could be addressed; these ideas may not be fully realised by the end of Q1, but we hope to at least have a concrete plan, and maybe even a prototype in place.
Lastly, with the CPython 3.14 development process well underway, there are two projects that we intend to work on, with the goal of having this work incorporated into Python 3.14. The first is the creation of official "embedded" distributions of CPython for more platforms. Python already produces an embedded build for Windows, and Briefcase is able to use this distribution as part of the process of creating Windows binaries. We hope that Python 3.14 will contain analogous builds for macOS, iOS and Android, removing the need for BeeWare (and other projects) to maintain independent CPython builds. We've had some initial discussions with the CPython release team; we hope that by the end of the quarter, we'll have a plan for how to deliver this work.
The second CPython feature we'd like to address is handling of cross-platform virtual environments - that is, creating a virtual environment that can "pretend" it is running on a different host platform. This is necessary for cross-platform builds, which require the ability to create an isolated PEP 517 build environment that can run Python on the local machine, but report platform-identifying information as if it were running on the target machine. A version of this cross-environment virtualization has been necessary to support cibuildwheel; however, it would be desirable to upstream this work so that it can be standardised as part of a stock Python environment. We hope to start discussions about this with the CPython core team in the near future.
Longer term goals
Once we've got a strong story for packaging third-party packages for iOS and Android, we'll be able to turn our focus back to Toga, and the work needed to make iOS and Android compelling app development platforms. There's a number of navigation and data organization widgets that need to be developed; we also need to improve documentation of some common development patterns that are sources of common questions in BeeWare support channels.
We'll should also be in a position to start working on the long list of projects in the Python ecosystem that would benefit from having iOS and Android support upstream. cryptography, numpy and pandas will be the highest priority for this work, but there's a very long tail of useful projects that have binary modules; ideally they'd all have iOS and Android support.
- الإدخال السابق
- December 2024 Status Update