I don't think core is special in this regard, but I *do* think it is
special in having a separate release cycle. Most Java projects these days
use version alignment (and usually a unified repository as well), despite
featuring many distinct components that all move at different speeds.
Examples include:

- Log4j2 (api, core, four logging bridges, many many appenders...)
- JUnit 5 (platform commons, Jupiter API, Jupiter engine, vintage engine,
Jupiter params support, platform runner...)
- Jackson (annotations, core, databind, dataformat, datatype, jaxrs,
Kotlin/scala support...)
- Netty (common, buffer, codec, resolver, transport, native libs, numerous
protocols and data formats...)
- AWS SDK for Java (*over a hundred* separate service SDKs, multiple HTTP
clients, SPI, code generators, SDK core...)

Under this approach, there is a clear benefit to the user of only having to
track one version number, no matter how many components are pulled in.
Currently, httpclient5 works quite the other way: users must add
dependencies on both httpcore5 and httpclient5 as a matter of course, and
must model both versions explicitly: this is the only way to be sure that
they are getting the latest versions of both components.

I also think that the projects listed above make it clear that dependency
alignment scales to a much larger number of components than we have
currently, and adopting it does not foreclose the possibility of developing
new httpcomponents in the future.

On Fri, Dec 13, 2019 at 1:57 PM Oleg Kalnichevski <[email protected]> wrote:

> I understand it can be frustrating while core APIs are not stable
> but core and client components tend to have different maturity cycles
> and therefore having distinct release cycles for core and client
> components is beneficial. In HC 4.x we can make fixes to core
> components and release them fast while some client features are still
> being worked on and are not ready for a release.
>
> We might also have a reverse-proxy or a more feature rich server sub-
> projects at some point. Coupling core with client would make it much
> harder and would necessitate a separate core project again at that
> point.
>
> Unless we decide we only develop HttpClient and nothing else, which is
> fine by me as long as this is what we all want.
>
> Oleg
>
>

Reply via email to