On Sat, Sep 2, 2023 at 8:35 AM Gary Gregory <garydgreg...@gmail.com> wrote:
> On Sat, Sep 2, 2023 at 6:45 AM Volkan Yazıcı <vol...@yazi.ci> wrote: > >> > For me, there is one kind of "user" >> >> As Piotr indicated we have multiple user groups. As stewards of this >> project we should take these into account, not just our personal agenda. >> The current release model where everything shipped all at once doesn't >> cater for all such use cases. >> >> > For me, there is one kind of "user": a POM that Dependabot can >> optionally manage >> >> We will still ship a BOM module where we share a version composition that >> is guaranteed to work. Hence, the "user" you mentioned, can still safely >> rely on *one single* `log4j.version` property in their `pom.xml` and that >> will still get regularly updated by `dependabot`. >> > > So any time you release any jar, the BOM is updated? > updated -> released Gary > > Gary > > >> >> Put another way, we won't disrupt the existing consumption method of >> Log4j. >> It will keep on working. We will introduce a new possibility: only relying >> on particular components (e.g., `log4j-api`) and only getting updates when >> those components *are* really updated. >> >> On Fri, Sep 1, 2023 at 11:16 PM Gary Gregory <garydgreg...@gmail.com> >> wrote: >> >> > Hi Piotr, >> > >> > Thank you for your detailed response :-) >> > >> > My comments are inline below. >> > >> > >> > On Thu, Aug 31, 2023 at 4:59 PM Piotr P. Karwasz < >> piotr.karw...@gmail.com> >> > wrote: >> > >> > > Hi Gary, >> > > >> > > May I offer a different perspective on this. >> > > >> > >> > I knew that ;) >> > >> > >> > > >> > > On Wed, 30 Aug 2023 at 18:56, Gary Gregory <garydgreg...@gmail.com> >> > wrote: >> > > > - I like a mon-repo in general because: >> > > > -- Everything is released together with the same version. There is >> no >> > > > mystery of what works with what, what we tested with what. See the >> bugs >> > > > with Maven plugins mysteriously breaking as counter-examples. >> > > >> > > While seeing the same version is aesthetically pleasant, we have 4 >> > > kinds of users: >> > > * library developers will never need anything beyond `log4j-api`, >> > > * JUL users will only need `log4j-to-jul`, which declares its >> > > `log4j-api` requirement, >> > > * same for Logback users, they'll only need `log4j-to-slf4j`, >> > > * Log4j Core users **need** to use `log4j-bom` anyway: I have seen >> > > several question from Spring Boot users that add the newest version of >> > > `log4j-core` to their app and end up with an old (incompatible) >> > > version of `log4j-api`, since Spring Boot does version management. >> > > >> > >> > I don't think this is relevant IMO. For me, there is one kind of >> "user": a >> > POM that Dependabot can optionally manage. Over at Apache Commons, >> > Dependabot runs on Friday and that's the day I pay attention to such >> things >> > (or Saturday AM). Running it every day is not great. It would be nice if >> > Dependabot could tell you about releases that address CVEs as soon as >> they >> > are available. >> > >> > >> > > >> > > > -- A mono-repo gives me the confidence that everything works >> *together* >> > > because >> > > > it was built and tested *together*. >> > > >> > > In a multi-module setup we would still run e.g. `log4j-cassandra` >> > > version 2.20.0 tests against the `log4j-core `2.24.0` snapshot. >> > > >> > >> > That's bad in my view, it's confusing as well. >> > >> > >> > > >> > > > -- I or Dependabot can update one Maven property in in my POM for >> all >> > of >> > > > Log4j and I'm done. >> > > > -- I *don't *want a Dependabot PR for each Log4j jar because I use >> > > > log4j-api v1, log4j-core v2, log4j-foo v3, log4j-bar v4, log4j-boo >> v5, >> > > > log4j-arg v6, and so on. >> > > >> > > If you stick to `log4j-api`, `log4j-bom`, `log4j-to-slf4j` or >> > > `log4j-to-jul` above, you would also get just one Dependabot PR. >> > > >> > >> > Maybe, maybe not. What module is in what repo is imaginary ATM. >> > >> > >> > > With some improvements to Dependabot, a new release of >> > > `log4j-something` and `log4j-bom` might be ignored by Dependabot if it >> > > detects that you are not using `log4j-something`. >> > > >> > >> > "With some improvements to Dependabot..." is an argument against what >> you >> > propose. You can't sell me something built with a tool that doesn't >> exist. >> > >> > >> > > > -- A mono-repo is the lowest barrier to entry for new contributors. >> > Don't >> > > > force me to learn more weird tooling and procedures, Maven and plain >> > git >> > > > are enough magic for anyone. >> > > >> > > I agree that finding the right repo in a multi-repo project might be >> > > challenging. >> > > On the other hand from a testing perspective the user does not have to >> > > know why a PR on `log4j-core` starts a test suite in another repo. >> > > >> > >> > And imagine the surprise when they break a downstream build they had no >> > idea existed in the first place. >> > >> > >> > > > - I would like to see all modules split up such that there are no >> > > optional >> > > > dependencies. I want to be able to depend on a log4j-console for >> simple >> > > > apps and get a minimal install. >> > > >> > > I would like that too in 3.x. At my current job the requirement was >> > > "having a logging system that prints to a console or a file", so we >> > > went with JUL. Of course I switched the backend on my dev box to Log4j >> > > Core since debugging using JUL is painful (no proper layout, markers, >> > > etc.). >> > > >> > >> > Well, there's one thing we can agree on :-) >> > >> > >> > > >> > > > - I am horrified to read "Enables module rot". Hiding a module from >> a >> > > user >> > > > and letting it "rot" is terrible: It is not a development process >> and >> > > > reflects poorly on us IMO. To drop a module, we should: Agree in a >> poll >> > > or >> > > > vote, deprecate it for removal, and then remove it. That's a >> process. >> > Not >> > > > "Oh, well, it's been rotting on the side over there and it doesn't >> work >> > > > anymore, oh well! Sorry!" >> > > >> > > Let's use the term "to retire a module". >> > >> > >> > Giving it a more polite name does not change anything. I see three >> states: >> > Supported, Deprecated, and Removed. >> > >> > I'll stop here since I've already expressed my arguments against what's >> > below. >> > >> > Gary >> > >> > >> > > These are feature stable that >> > > have a much slower lifecycle than `log4j-core` and a smaller user >> > > base. >> > > I would prefer: >> > > * to still support these modules, >> > > * to have a version number that reflects the actual changes to the >> > module, >> > > * to be able to release them independently if a bug report comes in, >> > > * to allow people to relieve us from maintaining these modules, if >> > > they work on a day-to-day basis with that technology. E.g. Apache >> > > Cassandra might decide to take over `log4j-cassandra` (fork the repo). >> > > >> > > We are not talking about "hiding" them from the user: one of the >> > > projects for next year is to include on our website the generated >> > > documentation of every Log4j component that has an enhanced >> > > `Log4jPlugins` in its JAR (on a opt-in basis). >> > > >> > > I have the feeling that we are discussing an X-Y problem: I want to be >> > > able to release components independently, so I don't have to release >> > > `log4j-core` just because SLF4J released version 2.x or I don't have >> > > to delay the release of `log4j-core` because Jackson has a streak of >> > > CVEs. I'd like to split the responsibility of releasing a 10M monthly >> > > downloads product into more digestible bits. >> > > >> > > That is why I support multi-repo, because it seems simpler to reach >> > > the goal. From a Public Relations perspective I would only like >> > > `log4j-api` and the three existing implementations to have separate >> > > repos. >> > > >> > > Piotr >> > > >> > >> >