This issue will be used for the high-level farmOS 2.x roadmap, with links to child issues as they are created. Please comment on sub-issues instead of this issue whenever possible.
Problem/Motivation
farmOS is currently built on Drupal 7, which was released in 2011 and will be end-of-life in November 2021 2022. This means it will no longer be supported by the Drupal community: https://www.drupal.org/psa-2019-02-25 Updated: https://www.drupal.org/psa-2020-06-24
In the meantime, Drupal 8 (released in 2015) and Drupal 9 (released in 2020) offer significant improvements that farmOS will benefit greatly from. Drupal 8 saw a major refactoring from Drupal 7, moving away from a lot of the old "Drupalisms" and procedural code to more modern object oriented PHP standards and frameworks like Symfony. Drupal 9 is essentially just Drupal 8 with deprecated code removed, and moving forward the Drupal community intends to keep upgrades easier in the future (https://dri.es/making-drupal-upgrades-easy-forever), to avoid the same difficulties of the D7-to-D8 upgrade paths.
So, the current plan is to skip Drupal 8 and build farmOS 2.x on Drupal 9.
It is important for farmOS to upgrade to Drupal 9 to ensure that it can continue to be developed/supported into the future.
Apart from that, we also have a long list of improvement ideas for farmOS. Many of these will be easier to implement with the tools that Drupal 9 provides. And it's better to build it once in the new way, rather than rebuild it again after the upgrade.
The upgrade will have many challenges, but the sooner we complete it, the better positioned we will be as a growing community. It is better to invest in feature development on farmOS 2.x than it is to build in farmOS 1.x and then need to rebuild/refactor for 2.x. Of course, we also have to balance this with the needs of current 1.x users.
This is also an opportunity to take the lessons that we learned in 1.x and reapproach some things in 2.x. The migration path from a 1.x database to 2.x will be fully-automated, so we can make changes to the data model in 2.x and write automated migrations from the 1.x data model.
Some of the high-level goals of the upgrade include:
- Improved APIs (JSON:API / GraphQL / Auto-generated docs with OpenAPI)
- Improved translation/localization capabilities
- More granular data (entity revisions for assets, logs, areas, etc)
- Map enhancements (standalone JS library, timeline slider, etc)
- More accessible to frontend developers (Field Kit / Field Modules)
- Cleaner codebase (D9 OO)
- Improved performance (lazy loading code, more caching options, etc)
- PostgreSQL database support
- Upstream support/security (Drupal 7 EOL 2021)
- UI improvements (modern theme options, in-place editing, etc)
And some things that will most-likely be done at the same time:
- #2363393: Make "Area" into a type of Farm Asset
- Inventory management
- Comments on areas, assets, logs, etc
Proposed resolution
The following meta issues outline the major initiatives of the upgrade. Each
contains overviews and links to specific tasks:
- #3151231: [META] farmOS 2.x Dependencies
- #3151232: [META] farmOS 2.x Build Process
- #3151233: [META] farmOS 2.x Data Model
- #3151240: [META] farmOS 2.x Migration
- #3151241: [META] farmOS 2.x API
- #3171281: [META] farmOS 2.x Data sharing and access control
- #3151243: [META] farmOS 2.x Python and Javascript Libraries
- #3151244: [META] farmOS 2.x Importers
- #3151246: [META] farmOS 2.x UI/UX
- #3151250: [META] farmOS 2.x Field Kit
- #3151247: [META] farmOS 2.x Contrib Modules
- #3159886: [META] farmOS 2.x Localization
- #3162602: [META] farmOS 2.0.0-beta1
Comments
Comment #2
m.stentaOne of the first steps I am in the process of taking right now is: #3083352: Migrate to farmOS-map library
This will remove the OpenLayers module as a dependency, which clears a major hurdle in the upgrade path to Drupal 8 and 9.
Comment #3
SocialNicheGuru CreditAttribution: SocialNicheGuru commentedAlso will there be a way to install via composer?
Comment #4
m.stentaYes - we discussed this recently in fact, and I think we are only going to use Composer for building farmOS. Not Drush Make like we've been doing in the past. Last I checked, drupal.org packaging still requires Drush Make file, which means we will need to package ourselves and publish on GitHub instead.
Comment #5
m.stentaOfficially created the 2.x-dev snapshot release node on drupal.org: https://www.drupal.org/project/farm/releases/2.x-dev
This means we can start using the 2.x-dev version in the issue queue instead of the old 8.x-2.x-dev.
Comment #6
m.stentaComment #7
m.stentaComment #8
m.stentaAdded a "Launch" meta roadmap issue will be used to track tasks/considerations for the ultimate launch of farmOS 2.x as the new official branch: #3162602: [META] farmOS 2.0.0-beta1
Comment #9
m.stentaComment #10
m.stentaUpdated the D7 EOL per https://www.drupal.org/psa-2020-06-24
Comment #11
m.stentafarmOS 2.0.0-beta1 has been released! https://farmos.discourse.group/t/farmos-2-0-0-beta1-has-been-released-ha...
We can close most of these "[META] 2.x..." tracking issues now and open new issues/roadmaps as needed.
I am leaving some open, which we will work on ahead of the 2.0.0 "stable" release: