Update to GSIP with additional details, such as adding a repo.

Personally I would like these other geoserver repos to match geosever
release cycle from a QA standpoint.

On Thu, Mar 16, 2023 at 7:58 AM Gabriel Roldan <
gabriel.rol...@camptocamp.com> wrote:

> Hi Andrea, Emanuele, and all.
>
> Thanks for this counter-proposal. It makes a lot of sense, and at
> Camptocamp we just met and decided it's a good way forward.
>
> The project will be called GeoServer ACL, as in Access Control List.
>
> It will have a somewhat more limited scope than GeoFence, at least
> initially,
> focusing only on a separate service, not an embedded engine.
>
> Therefore, we need to fine tune a couple aspects.
>
> First and foremost, we need a home for it. It could be as part of
> geoserver-cloud's codebase,
> but it'd be so much better if we can be granted a /geoserver/geoserver-acl
> github repository.
>
> Additionally we'll need to be able to deploy artifacts to maven, so the
> community
> module can depend on them.
>
> Do you think those two requests are acceptable? How can we proceed? is a
> GSIP
> required to create a sibling project under github's /geoserver
> organization?
>
> Best regards,
> *camptocamp*
> INNOVATIVE SOLUTIONS
> BY OPEN SOURCE EXPERTS
>
> *Gabriel Roldan*
> Geospatial Developer
>
>
>
> On Mon, Mar 13, 2023 at 12:14 PM Andrea Aime <
> andrea.a...@geosolutionsgroup.com> wrote:
>
>> Hi Gabriel,
>> I’m going to start briefly and do what I haven’t done in ages: cast a -1
>> on the proposal, but with an alternative proposal that will allow you to
>> retain all your existing work.
>>
>> Our community has had, over the years, a strong “talk first” policy. It
>> means that one should discuss the design of a major change before doing
>> actual work. This has precedent, for example it’s what I did in 2013, when
>> I proposed to rewrite the CSS styling engine in Java
>> <https://sourceforge.net/p/geoserver/mailman/geoserver-devel/thread/CA%2BnxMTvgAPO5rno80eF47%2BFmcJqeFPRSUL7Suf63k%3DSWEeU%3DZA%40mail.gmail.com/#msg30912716>
>> (hard lesson learned there).
>>
>> Another bit that is quite relevant, is who is in control of the module:
>> the PSC is the maintainer of all core modules, but extensions modules have
>> a dedicated maintainer that controls the module. In this case, that’s
>> Emanuele. While for a situation like this it’s great to have a document
>> that details the proposed changes, I believe the PSC role is mostly a
>> consultation. The rules are not clear here, I’m open to discussion.
>>
>> There are also practical aspects that make this rewrite a no go; they are
>> not technical, but relate to pre-existing knowledge, availability of time
>> and money. Maintenance of a module requires few things these days: being
>> ready to review changes made by third parties, evaluate bug reports, and
>> answer questions on the user list, on a “as time allows” basis. This can be
>> done leveraging knowledge of how the module works.
>>
>> The fork is reshuffling the entire code base, and introducing a number of
>> libraries that are not part of the existing GeoServer dependencies. Picking
>> up all these new libraries is problematic for the community at large,
>> because it increases the number of bits the developers have to be familiar
>> with, and makes the review of changes even harder, because one would have
>> to get up to speed with them before even starting to look at the code.
>>
>> Even assuming in blind faith that we could catch up later, it would still
>> mean we have no way to review the changes in the short term (too much
>> effort combined required to go and learn what we need, and then review the
>> full rewrite).
>> So, where to go from here? Where you are going, we simply cannot follow.
>>
>> We kindly ask you to retain all your work, and give it a different name:
>> let’s call it GING for now (GING Is Not GeoFence).
>> The following points are very important for us:
>>
>>    - GING is not an “upgrade” to GeoFence, but a fork of it, that users
>>    can migrate to.
>>    - GING is not endorsed by GeoSolutions, but has, at the beginning,
>>    Gabriel Roldan as the sole maintainer.
>>    - GING starts as a new community module and works its way up to
>>    extension status like any other module (including Geofence
>>    <https://github.com/geoserver/geoserver/wiki/GSIP-164>) did.
>>
>> There is a number of advantages going this way:
>>
>>    - Gabriel does not lose the large work investment in his fork, and
>>    gets a module that he’ll “be in charge of project maintenance for these
>>    customers for the foreseeable future” and will get a “codebase that's
>>    closer to pleasure to work on than to a hassle”.
>>    - There is no longer reason to carry around baggage, Gabriel can drop
>>    the other REST APIs and just keep the newer one.
>>    - The H2 dependency is no longer a problem, it can be dropped right
>>    away.
>>    - Gabriel still gets documentation and UI that he can adapt to the
>>    “GING” name, without having to recreate all of that from scratch.
>>    - The developer community avoids a fight, and the user community gets
>>    two alternative security subsystems that they can choose from based on the
>>    functionality and level of support they get from their respective
>>    maintainers.
>>
>> Finally, I’m not here saying that GeoSolutions will go with GeoFence in
>> the longer term. It might well be that eventually the two end up
>> converging, or that one eventually loses steam and dies and we end up all
>> working on the same module. But in the short to medium term (e.g., the year
>> to come), the direction proposed by Gabriel is not working for us. At the
>> same time, the existing GeoFence code is not working for him, Emanuele has
>> made a counter-proposal that has been rejected (or so I read the answer).
>> Thus, it’s best to take two separate ways, while still working among the
>> same community, leveraging the pluggable nature of the GeoServer
>> authorization subsystem to keep both modules around.
>>
>> Best regards
>> Andrea
>>
>>
>> On Fri, Mar 10, 2023 at 6:48 PM Gabriel Roldan <
>> gabriel.rol...@camptocamp.com> wrote:
>>
>>> Hi Emmanuele,
>>>
>>> Thanks for the proposal review and comments.
>>>
>>> First and foremost, let me stress out the proposal is to _create a
>>> branch_, 4.0.x.
>>> Since there are several topics that of course need to be discussed and
>>> agreed
>>> upon, all this work would serve as a concrete platform to do that, with
>>> as much
>>> proof as possible that everything keeps working.
>>> Not to merge or force any of this in the current 3.x series.
>>>
>>> Follow up inline.
>>>
>>> On Thu, Mar 9, 2023 at 12:40 PM Emanuele Tajariol <
>>> emanuele.tajar...@geosolutionsgroup.com> wrote:
>>>
>>>> Dear Gabriel,
>>>>
>>>> I went through your proposal; I will start with some comments about the
>>>> *motivation* section:
>>>>
>>>>    - *The persistence abstractions are powered by Google's Generic DAO
>>>>    Framework, which is not maintained since years ago*
>>>>       - This refactoring was already completed and working, as
>>>>       reported in this issue:
>>>>          - JDK11 compatibility #128
>>>>          <https://github.com/geoserver/geofence/issues/128> [1]
>>>>
>>>> Oh that's interesting. Unfortunately I couldn't know, or at least it
>>> was easy to oversight,
>>> since that issue is three years old, it's not merged, and the title does
>>> not relate to the persistence
>>> framework; though the description does indeed mention it. Should I've
>>> noticed it, it would have
>>> saved me a ton of work.
>>>
>>>>
>>>>    - All the GenericDAO constructs were ported to Hibernate’s criteria
>>>>       and to some newly created classes to reduce the impact on the 
>>>> existing code
>>>>       as much as possible.
>>>>
>>>> Yes, the Hibernate criteria API also makes sense.
>>> Personally, I prefer QueryDSL for the type-safety part. QueryDSL
>>> code-generates classes that
>>> let you create arbitrary queries in a type safe way, and adds no runtime
>>> dependencies, just a
>>> compile-time @Entity annotation processor.
>>> In any case this and everything else is up to discussion.
>>>
>>>>
>>>>    - *The REST APIs exposed by GeoFence's standalone server
>>>>    application, and the GeoFence embedded engine in GeoServer, have some
>>>>    differences, which makes it hard to use a REST client interchangeably.*
>>>>       - When the REST APIs were reimplemented in the embedded
>>>>       configuration (in the geofence-server module), they did not follow 
>>>> the
>>>>       detailed documentation available at GeoFence REST API
>>>>       <https://github.com/geoserver/geofence/wiki/GeoFence-REST-API>
>>>>       [2] , that was followed in the initial (standalone) implementation. 
>>>> *I
>>>>       would not create a third API, but would stick to the existing one: 
>>>> breaking
>>>>       backwards compatibility is something we try very hard not to do in
>>>>       GeoServer, since there are deployed systems depending on it that 
>>>> would
>>>>       break on upgrade.*
>>>>
>>>> As much as I very much agree with the principle, we're kind of in an
>>> impossible situation here.
>>> I agree having two disparate REST APIs is bad enough.
>>>
>>> On the other hand, I have been working for a year now on a system that
>>> needs to interface with GeoFence.
>>> I would rather have the chance to deploy GeoFence standalone or
>>> embedded, and be able to use the same
>>> REST API regardless, but that's impossible without tons of hacks.
>>>
>>> It's also difficult to implement a client even if you choose one of
>>> them, since there are some inconsistencies like
>>> requests to create a Rule accepting a given content type (e.g.
>>> application/json) but returning text/plain with the
>>> rule id, and then expecting long to fetch the rule.
>>>
>>> Additionally, in order to replace Spring RMI with an API client, the
>>> client would need to implement GeoFence standalone's
>>> REST API, but a client working against GeoServer would implement
>>> GeoFence embeeded's REST API, so we're just multiplying
>>> the maintenance problem.
>>>
>>> So my proposal is to:
>>> 1- use an API-first approach through an OpenAPI specification that's
>>> common to both kinds of deployments.
>>> 2- *Maintain* the current embedded API for as long as necessary in
>>> GeoServer.
>>> 3- Also expose the new API as v2, where anyone can use the provided or
>>> generate ready to use client libraries in different programming languages
>>>
>>> (I've actually just finished porting both geoserver plugins, will send a
>>> link once I get the configuration part working too in a backward compatible
>>> way)
>>>
>>> Thinking of an upgrade path:
>>> For GeoServer embedded, REST API wise, wouldn't make any difference,
>>> other than v2 also being available, or not even, could be a configuration
>>> choice.
>>> For standalone, an upgrade would also mean a standalone GeoFence
>>> upgrade, so it doesn't matter if it uses RMI or the new OpenAPI interface
>>> to communicate with GeoFence
>>>
>>>
>>>> Regarding the other points, it’s great getting rid of the older
>>>> libraries (we had to revive the old Hibernate Spatial in order to keep up
>>>> with the JTS upgrades – see
>>>> https://github.com/geosolutions-it/hibernate-spatial).
>>>> So, apart from the notes above, I’m good with the various motivations
>>>> and points in the proposal, because they aim to get rid of older
>>>> unmaintained libraries and to keep the libs aligned with the ones used in
>>>> GeoServer.
>>>>
>>> nice!
>>>
>>>>
>>>>
>>>> That said, I’m quite concerned with the modules refactoring:
>>>>
>>>>    - *They are not strictly needed and motivated by the previous
>>>>    points.*
>>>>
>>>> While I disagree (again, for a longer term, on 4.x) , I see my mistake
>>> in not emphasizing
>>> on the motivation section and only mentioning sharing the maintenance
>>> burden in the
>>> overview section, I guess I just didn't want to come across as arrogant
>>> or patronizing.
>>>
>>> Since we're kicking off the discussion, allow me to elaborate:
>>>
>>> I know both Alessio and yourself shall know the codebase from the heart,
>>> and that's great,
>>> but bear with me, as an outsider and newcomer to the project, I had a
>>> rather hard time getting acquainted with it, hence my intention is to
>>> make sure the architecture
>>> is very clear and upfront, not only for us but for any other potential
>>> collaborators. Something
>>> closer to a Screaming Architecture
>>> <https://blog.cleancoder.com/uncle-bob/2011/09/30/Screaming-Architecture.html>,
>>> as my initial struggles were related to figuring out the architecture,
>>> and how components relate to each other, not from the persistence
>>> viewpoint but from
>>> the business domain view.
>>>
>>> If you look at the following comparison of 3.x and 4.x proposed
>>> modularity, I think the 3.x one doesn't
>>> say much about what the software system is or does, but instead I see
>>> there are apis, persistence, and
>>> a gui.
>>> The 4.x proposal on the other hand makes it very clear that the business
>>> domain has 4 domain units
>>> and a common object model, and that's all one would need to look into to
>>> understand GeoFence.
>>> No Spring, no JPA, no REST, no anything else than pure domain specific
>>> logic.
>>> Everything else is integration and implementation detail you can dig
>>> into if need be.
>>>
>>> [image: image.png]
>>>
>>>
>>>>    - They will likely make it difficult to review and functionally
>>>>    validate.
>>>>
>>>> They might. Hence all functional tests are in the domain modules
>>> themselves, without requiring digging
>>> into integration details, while at the same time serve as base
>>> integration tests for both the persistence
>>> and client api integrations.
>>> The tests (e.g. the most important being RuleReaderServiceImplTest) run
>>> against in-memory
>>> persistence abstraction implementations that use RuleFilter itself as
>>> predicate, through the
>>> new RuleFilter.matches(Rule):boolean method, and that helped me a lot
>>> to make sure both the openapi
>>> client and JPA backed Repositories do the right thing and are hence
>>> interchangeable as backing
>>> Repositories for the different services.
>>>
>>> Other things like making the object model immutable also helps to
>>> clearly reason about things, like in
>>> avoiding side effects with argument objects being changed by functions.
>>>
>>>>
>>>>    - They may introduce further issues, along with the potential ones
>>>>    caused by the already big library upgrade shock.
>>>>
>>>> Yes they would, as there's no such thing as bug-free software is it? On
>>> the bright side we will be taking on the burden of stress
>>> testing and fixing for our current customer, and another one in the very
>>> near future.
>>>
>>>>
>>>>    - They may be a blocker for the current maintainers to keep up the
>>>>    work and to respond quickly to the issues that will pop up, especially 
>>>> in
>>>>    the first times it will be released.
>>>>
>>>> Indeed. So once again, no rush. I'm only asking for a branch so we have
>>> a common place to review, discuss, and
>>> coordinate on things. I honestly think having this starting point is
>>> much better than trying to make one proposal at a time
>>> because it's practically impossible, at least for me, to foresee all
>>> these changes, optimizations, or whatever in advance.
>>> If we don't take the opportunity to refactor and improve while we have
>>> the funding, we might as well end up in endless
>>> discussions and consume all those precious resources without anything
>>> concrete as outcome.
>>>
>>>
>>>> *My proposal is to split the current proposed work in two phases:*
>>>>
>>>>    - A first GSIP (and PR) focused on the points listed in the
>>>>    motivations/proposal, that is an *upgrade of the libraries*, and
>>>>    partial rewriting of the code/configurations strictly needed to make the
>>>>    new libs work. That GSIP would be reviewed, tested, and accepted quite
>>>>    quickly, because this is a much-needed improvement with a well-defined
>>>>    scope, and the current maintainer would know the existing dependencies
>>>>    between modules.
>>>>
>>>> That's not a bad idea at all, thinking of the 3.x series. I can explore
>>> it but definitely need
>>> to reach a compromise to:
>>> - ditch the GWT gui and provide only a spring-boot application for the
>>> current (standalone) REST API. Or maybe
>>> not even, does anyone use it? or does everyone uses the embedded engine?
>>> - keep on using RMI for GeoServer to GeoFence communication
>>>
>>>>
>>>>    - A second GSIP about the *module refactoring*, that IMHO should be
>>>>    agreed upon by the developers’ community (and in particular module
>>>>    maintainers) in advance, to explore the possible alternative design, and
>>>>    find one that both parties agree upon. It would need more time to be
>>>>    investigated, tested, discussed, and in the end adopted and would give 
>>>> time
>>>>    to the other devs to get accustomed to it.
>>>>
>>>>  That would be this one. Given I'm committed to it I'd rather get the
>>> go ahead to have a 4.x branch or be forced to work on it from my fork alone.
>>>
>>> Thanks again for the review and comments, looking forward to yours and
>>> anyone else's.
>>>
>>> Cheers,
>>> Gabe.
>>>
>>>
>>>> Looking forward in reading your feedback.
>>>>
>>>>    Cheers,
>>>>    Emanuele
>>>>
>>>>
>>>> [1] https://github.com/geoserver/geofence/issues/128
>>>> [2] https://github.com/geoserver/geofence/wiki/GeoFence-REST-API
>>>>
>>>> On Wed, Mar 8, 2023 at 3:35 AM Gabriel Roldan <
>>>> gabriel.rol...@camptocamp.com> wrote:
>>>>
>>>>> Hi list,
>>>>>
>>>>> I've just created a GSIP (216) with a proposal to make several
>>>>> improvements to GeoFence.
>>>>>
>>>>> Please see https://github.com/geoserver/geoserver/wiki/GSIP-216 for
>>>>> details.
>>>>>
>>>>>
>>> *camptocamp*
>>> INNOVATIVE SOLUTIONS
>>> BY OPEN SOURCE EXPERTS
>>>
>>> *Gabriel Roldán*
>>> Geospatial Developer
>>>
>>>
>>> _______________________________________________
>>> Geoserver-devel mailing list
>>> Geoserver-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/geoserver-devel
>>>
>>
>>
>> --
>>
>> Regards,
>>
>> Andrea Aime
>>
>> ==
>> GeoServer Professional Services from the experts!
>>
>> Visit http://bit.ly/gs-services-us for more information.
>> ==
>>
>> Ing. Andrea Aime
>> @geowolf
>> Technical Lead
>>
>> GeoSolutions Group
>> phone: +39 0584 962313
>>
>> fax:     +39 0584 1660272
>>
>> mob:   +39  339 8844549
>>
>> https://www.geosolutionsgroup.com/
>>
>> http://twitter.com/geosolutions_it
>>
>> -------------------------------------------------------
>>
>> Con riferimento alla normativa sul trattamento dei dati personali (Reg.
>> UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si
>> precisa che ogni circostanza inerente alla presente email (il suo
>> contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è
>> riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il
>> messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra
>> operazione è illecita. Le sarei comunque grato se potesse darmene notizia.
>>
>> This email is intended only for the person or entity to which it is
>> addressed and may contain information that is privileged, confidential or
>> otherwise protected from disclosure. We remind that - as provided by
>> European Regulation 2016/679 “GDPR” - copying, dissemination or use of this
>> e-mail or the information herein by anyone other than the intended
>> recipient is prohibited. If you have received this email by mistake, please
>> notify us immediately by telephone or e-mail
>>
> _______________________________________________
> Geoserver-devel mailing list
> Geoserver-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/geoserver-devel
>
-- 
--
Jody Garnett
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Reply via email to