<div dir="ltr"><div><div><div><div>Dear Nyall and all,<br><br></div><div>here are some of my thoughts mostly relating to GRASS GIS (although it may not express views of the whole GRASS GIS developer team).<br></div><div><br>On Thu, Feb 8, 2018 at 8:55 PM, Nyall Dawson <<a href="mailto:nyall.dawson@gmail.com" target="_blank">nyall.dawson@gmail.com</a>> wrote:<br>><br>> Here's the situation as I see it:<br>><br>> ------------<br>> The past<br>> -----------<br>><br>> We (the QGIS project) have struggled to keep a bunch of providers<br>> stable and available with the base QGIS install, and the current<br>> maintainers (Alex and Victor, others) have (understandably) struggled<br>> with the burden of maintaining these alone and the time commitment<br>> required to do so. Users have been frustrated by breakage which occurs<br>> when the algorithms they depend on break due to changes in underlying<br>> libraries for which the processing providers have not been adapted.<br>><br>> Despite this, I'd say overall it's worked OK-ish up to now, but<br>> definitely with lots of room for improvement.<br>><br>> -------------<br>> The goals<br>> -------------<br>><br>> I think everyone involved is in agreement that processing's strength<br>> comes when there's many providers available and it's able to tie<br>> together processes regardless of which provider or library they come<br>> from. So I'd say our common goals are:<br>><br>> 1. Encourage development of as many processing providers as possible<br>> 2. Make it easy for developers to create and maintain these providers<br>> 3. Make it easy for users to be able to use the providers<br>> 4. Make everything stable and painfree for users<br>><br>> Any disagreements? No? Good ;)<br>><br>> So if we agree that those are the end goals, we should be using them<br>> to drive this discussion.<br>><br>> -------------------<br>> The questions<br>> -------------------<br>><br>> The open, debatable questions are:<br>><br>> - Which is the best approach for allowing easy maintenance of<br>> providers (*regardless* of whether the provider is maintained by the<br>> core QGIS team or a 3rd party)? Is it keeping the code in the master<br>> codebase and locking to QGIS releases, or publishing via plugins and<br>> having independent release schedules? Which approach will encourage<br>> more active maintenance of these providers and share the burden of<br>> this maintenance?<br><br></div><div>One thing is where to keep the code, however I'm not sure what code are we talking about and I would like to talk about this first. I think that recent post by Moritz is bringing this up as well:<br><br><a href="https://lists.osgeo.org/pipermail/grass-dev/2018-February/087420.html" target="_blank">https://lists.osgeo.org/<wbr>pipermail/grass-dev/2018-<wbr>February/087420.html</a><br><br>As far as I know, QGIS Processing has a text file for each GRASS module describing its interface and maintenance of these takes time. However, every GRASS module can tell about itself when called with --interface-description parameter. If this is used, individual parameters don't need to be maintained and any, even user provided module can be executed in processing.<br><br>The --interface-description parameter gives XML which would need to be converted or a new parameter, let's say --qgis-description, would need to be added for a QGIS-specific format, there is for example --script for GRASS GIS interface description for scripts. --qgis-description would need to be in GRASS GIS code base while the conversion can be anywhere. See emails from Rashad discussing a possible implementation with the --qgis-description way and the OTB way:<br><br><a href="https://lists.osgeo.org/pipermail/grass-dev/2018-February/087362.html" target="_blank">https://lists.osgeo.org/piperm<wbr>ail/grass-dev/2018-February/<wbr>087362.html</a><br><a href="https://lists.osgeo.org/pipermail/grass-dev/2018-February/087390.html" target="_blank">https://lists.osgeo.org/piperm<wbr>ail/grass-dev/2018-February/<wbr>087390.html</a><br><br></div><div>The was discussed in the past and in fact, it is used in the QGIS GRASS plugin as Radim explains in this older email:<br><br><a href="https://lists.osgeo.org/pipermail/grass-dev/2015-March/074629.html" target="_blank">https://lists.osgeo.org/piperm<wbr>ail/grass-dev/2015-March/<wbr>074629.html</a><br><br></div><div>However, it is not using the --interface-description XML only, but it is also using the qgm files to supply some additional information which means that this system still requires updates which are separate from the updates of GRASS modules. This can be avoided if the necessary information is updated upstream or sometimes even GRASS --interface-description format or the individual module descriptions are extended to include that what is needed by QGIS Processing. Here is a thread which disuses this issues although diverges into the following: <br><br><a href="https://lists.osgeo.org/pipermail/grass-dev/2015-September/076138.html" target="_blank">https://lists.osgeo.org/<wbr>pipermail/grass-dev/2015-<wbr>September/076138.html</a><br><br></div><div>One issue which is creating differences between QGIS Processing representation of the module and the GRASS one is the issue of advanced parameters. GRASS itself has mechanism to organize the parameters into groups and marks the required ones. This is of course something which is constantly being refined and it can be used and changed also for QGIS Processing as discussed in this 2015 post:<br></div><div><br><a href="https://lists.osgeo.org/pipermail/grass-dev/2015-December/078000.html" target="_blank">https://lists.osgeo.org/<wbr>pipermail/grass-dev/2015-<wbr>December/078000.html</a><br><br></div><div>Other issues besides the interface include list of GRASS modules usable and unusable in QGIS Processing, thematic tree of these modules, splitting modules and more. Many of these are discussed in this recent post:<br></div><div><br><a href="https://lists.osgeo.org/pipermail/grass-dev/2018-February/087388.html" target="_blank">https://lists.osgeo.org/<wbr>pipermail/grass-dev/2018-<wbr>February/087388.html</a><br><br></div><div>One of the issues is issue of formats (or import & export). Here again, it seems to that it is more advantageous to have a function in GRASS code base to care take of the import and, if needed, push the changes upstream to it (from QGIS point of view). Here is a related example which is a comment from Markus Neteler (regarding currently preferred solution for vector import) which would be part of PR/patch review process if the import function was originally submitted as extension of GRASS code base:<br></div><div><br><a href="https://github.com/qgis/QGIS/pull/5426#issuecomment-345067457" target="_blank">https://github.com/qgis/QGIS/<wbr>pull/5426#issuecomment-<wbr>345067457</a><br><br></div><div>Then there is of course the issue of GRASS modules which are more difficult to wrap in QGIS Processing because the inputs and outputs are not explicitly stated, most prominent example is probably r.mapcalc but there is couple of more, although we were able to reduce this number lately:<br><br><a href="https://lists.osgeo.org/pipermail/grass-dev/2015-January/072979.html" target="_blank">https://lists.osgeo.org/<wbr>pipermail/grass-dev/2015-<wbr>January/072979.html</a><br><br>See also the following post from Giovanni Manghi (sent off-list to Markus Neteler and shared by him) and a ticket commend by me for more examples and details:<br><br><a href="https://lists.osgeo.org/pipermail/grass-dev/2014-August/070342.html" target="_blank">https://lists.osgeo.org/<wbr>pipermail/grass-dev/2014-<wbr>August/070342.html</a><br><a href="https://trac.osgeo.org/grass/ticket/2409#comment:17" target="_blank">https://trac.osgeo.org/grass/<wbr>ticket/2409#comment:17</a><br><br></div><div>Here is a good r.mapcalc-related example of (at least) asking for changes upstream (although sent privately to Markus Neteler who opened the issue):<br></div><div><br><a href="https://trac.osgeo.org/grass/ticket/3431" target="_blank">https://trac.osgeo.org/grass/<wbr>ticket/3431</a><br><br>> - Who should be responsible for maintaining the providers? Should<br>> maintenance be done by the QGIS core developer team or by 3rd parties?<br><br></div><div>I'm not sure if we can really separate this from the place in the code, but if there is a notion of pushing changes upstream then that gives definitively us more flexibility.<br><br>Besides maintenance, I think the initial development, which is necessary for a realistic maintenance plan, is a major issue. I, and I think some other GRASS devs too, would be happy to work on it if the financing is addressed. A different suggestion is here as well and that's GSoC idea proposed by Martin Landa:<br><br><a href="https://trac.osgeo.org/grass/wiki/GSoC/2018#ImproveGRASSintegrationinQGIS3" target="_blank">https://trac.osgeo.org/grass/<wbr>wiki/GSoC/2018#<wbr>ImproveGRASSintegrationinQGIS3</a><br></div><div><br>> - Is it a core requirement that 3rd party providers are installed with<br>> EVERY QGIS install, or is it acceptable to require interested users to<br>> manually install the tools which they find useful? If the second<br>> option is preferred, then how can we ensure that users are aware of<br>> the availability of these tools?<br><br></div>If they install manually, on Windows, users can have the latest version of the software instead of the one packaged with QGIS. OSGeo4W is a different case; not sure about Mac. However, on Linux, the decision is up to the packagers, so in any case, the QGIS part needs to be able to work with different versions. Regardless of QGIS packaging efforts, I have seen many users with old GRASS who installed new standalone GRASS on the side, even recently.<br><br></div>On the other hand, many users benefit from the one package, because they need to get software approved, if they get QGIS packaged with GRASS  approve, they got GRASS as well. Getting approval for each individual provider is likely more paperwork.<br><br></div>I hope this will help and let me know what I'm missing.<br><br></div><div>Best,<br></div>Vaclav<br></div>