It helps that the consumer pom still uses the old namespace, but
that's still not everything. Tools still need to analyze and
understand the build pom, not just the consumer pom. For instance,
organizations that are as paranoid about security as Google (and with
good reason) build everything from source, and do not trust opaque
binary jars. Again, organizations that  large can afford to work
around multiple namespaces, but I would like to make this more
accessible for smaller developers that also want to build tools that
try to comprehend the build structure.

The more I dig into this the more I worry that this is hiding some
other questionable practices where until now no one has asked the
simple question, "Why are we doing it like this?" Two in particular
are starting to concern me:

1. Model versions are inferred from the namespace, enabling conflicts
that wouldn't otherwise exist. A general sense of code hygiene
suggests that there should be exactly one element defining the model
version, and if there are two they shouldn't be allowed to disagree
with each other. Otherwise, devs are in for some nasty debugging
sessions where they think they've set something only to see different
behavior. It's needlessly complex.

2. It's not just a 4.0 and 4.1 namespace. Large parts of Maven code
appear to allow any namespace at all. E.g.
http://docbook.org/ns/docbook This one might confuse tools in both
directions: the ones looking for a pom and the ones looking for
whatever the namespace purports to be. I'm not completely sure what
the implications are here — what tools it would break or holes it
might open — but it's a big world, and attackers looking to compromise
systems are often more devious than me. And again we don't actually
gain anything useful by allowing multiple namespaces so locking this
down feels prudent.

Bottom line: I'm not hearing any technical reasons why we need or
should have two namespaces for what amount to the same elements. The
primary objection to keeping the namespace is timing. Folks are tired,
and want to ship. I sympathize with that. However, I fall on the side
of the line that would prefer to see getting this right now, even at
the cost of delaying 4.0, rather than living with a needlessly complex
format for the remaining decades it's likely to be in the world.

On Wed, Jul 23, 2025 at 6:38 PM Guillaume Nodet <gno...@apache.org> wrote:
>
> I think you missed an important feature of Maven 4: the consumer POM.
>
> In Maven 4, the consumer POM is what is deployed for the POM accompanying a
> jar.
> That POM has a  http://maven.apache.org/POM/4.0.0  + modelVersion = 4.0.0
> so that it can be consumed  by Maven 3 and other tools, gradle, ivy, etc...
> This POM is rewritten from the build POM which can have a different model
> version,
> namespace, or language (i.e. not XML).
> So if your concern is about what is deployed as POM, then you don't have to
> worry about it.
>
> Le mer. 23 juil. 2025 à 15:37, Elliotte Rusty Harold <elh...@ibiblio.org> a
> écrit :
>
> > On Wed, Jul 23, 2025 at 1:07 PM Tamás Cservenák <ta...@cservenak.net>
> > wrote:
> > >
> > > To me your message sounds you assume model parsing == model building.
> > > Dependency trees and XML parsing? Analyzing what is in project? Just as
> > > users can use xpath or other standard tech?
> > >
> > > This is totally unrelated and POMs alone are most often even incomplete
> > as
> > > they have parents, imports and interpolation and profile activations and
> > so
> > > on.
> > >
> >
> > This is an important point. The Maven repository system is more than
> > Maven. The pom.xml is not just for Maven. Most obviously it is also
> > used by gradle, Ivy, bazel, and other build tools. POMs are also
> > consumed by static analyzers who want to figure out what dependency
> > trees look like, most commonly whether there are vulnerable or banned
> > dependencies but also for things like dependency convergence and
> > necessary updates. There are others, and there would be many more if
> > the pom format were easier to consume and process.
> >
> > At one point a large part of my day job was writing software to
> > analyze and understand the dependency graph of various projects. We
> > ended up spending probably several hundred thousand dollars worth of
> > engineer time because we couldn't use standard XML tools for this task
> > precisely due to the namespace problems. Google could afford to work
> > around that, but a lot of organizations can't.
> >
>
> From the pom.xml, you have no simple way to get the dependency tree.
> Computing this tree is what the resolver does, and that's definitely not a
> trivial task. We've simplified the consumer POM a bit in Maven 4 by
> flattening the POMs, so it's a bit easier to actually compute the effective
> POM because you don't have to flatten the hierarchy.  But trying to
> compute the dependency tree without Maven will very probably lead to
> a different tree than what Maven expects.
> Other build tools tend to use Maven Resolver to actually compute the
> dependency tree AFAIK.  Which is also why we want Maven to be more
> reusable, and that's what the Maven 4 API will provide with a single API
> to access all Maven features, either internally or externally.
>
>
> > I wish the repository system and pom format were not so tightly
> > coupled to the Maven build tool, but that ship sailed long ago.
> > Ideally the decision about when and whether to revise the pom.xml
> > format would not be made not only by Apache Maven developers but
> > instead include all the stakeholders: Gradle, Sonatype, Google,
> > Oracle, and more. So far none of them have been heard from. We just
> > have a very small group of active developers of one build tool making
> > decisions for everyone. What we can do now is avoid making the problem
> > even worse by introducing additional namespace URIs beyond what we
> > already have.
> >
>
> Again, that's the consumer side.  We did split the consumer and the build
> POM. So, yes, the Maven community is deciding how the BUILD POM is
> evolving, and I think that's fine.  I don't see why other people would have
> to say about which feature we want to add in a particular version.
> That does not affect other consumers from Maven Central at all.
>
>
> > --
> > Elliotte Rusty Harold
> > elh...@ibiblio.org
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > For additional commands, e-mail: dev-h...@maven.apache.org
> >
> >
>
> --
> ------------------------
> Guillaume Nodet



-- 
Elliotte Rusty Harold
elh...@ibiblio.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
For additional commands, e-mail: dev-h...@maven.apache.org

Reply via email to