Greetings,

I'd like to take a chance, now that 0.10 is out, to make a point in
favor of using submodules rather than having all bindings in the same
repository.

I think qpid-proton has reached the point where it's mature enough to
have some of the bindings promoted to having their own repos. More
importantly, I believe these bindings are mature enough and ready to
build a community on their own.

Lets take the python bindings, for instance. I've been contributing to
the python bindings quite a bit in the last couple of months. The
bindings went from depending on cmake for tests to having their own,
still dependant on proton-test, test suite that is self-maintained.

Furthermore, the python bindings went from depending on cmake to be
built to being self-built using python's internal build system. It's
still possible - and in fact, it still happens - to build these
drivers running cmake, although it's, in my personal opinion, not
recommended.

As you can see from the above, the python bindings depend on proton-c
but they don't need to live in the same codebase. Therefore, I've
prepared a small POC to show case this repo structure:

- https://github.com/FlaPer87/test-python-qpid-proton

The above repo contains the python-qpid-proton code. As you can tell
from the commit history, not many changes were required to set it up.
The relevant bits of this repo, I believe, are the ones related to the
submodule. The qpid-proton submodule points qpid-proton's master
branch in the test-python-qpid-proton branch, whereas in the 0.10
branch, it tracks qpid-proton's 0.10.x. This is important for the
bindings to keep track of the right code/release/tests.

- https://github.com/FlaPer87/qpid-proton/tree/submodules

The above is a fork of the qpid-proton repo we use already but rather
than having the python-qpid-bindings in tree, it just tracks the
master branch. (I created a `submodules` branch because I didn't want
to mess with the master branch in my fork).

I don't think tracking the binding in the qpid-proton repo is
necessary but I see how it's useful to avoid introducing breaking
changes on drivers. To be more precise, I don't think the above is
necessary because if we are testing bindings in cmake to make sure we
don't break backwards compatibility, we could simply install the
latest stable version and test against that, rather than testing
against the latest binding's master, which could, but shouldn't, be
broken.

I wouldn't probably advocate for the above to applied to every binding
we have since some of them might not be ready for this but I
definitely want to advocate to make this happen for the python binding
(and other bindings).

This structure will make it easier to mainting bindings, to build a
community around these bindings - I contribute more to the python
binding than proton-c. It'll also help keeping a clean history for
each project and to issue binding releases, therefore creating
tags for bindings, as needed.

I get it's worked well so far and probably some of you won't be happy
with this proposal but, git is powerful enough to support the above
structure, which is ideal for these kind of projects. Correct me if
I'm wrong but I believe the current structure also comes from the old
times when qpid-proton used to be in subversion.

Hope the above makes sense and I'm sorry for such a long email, I
should've drunk less coffee.
Flavio

P.S: I'm more than happy to help setting this up and to bring it back
if the experiment fails.

--
@flaper87
Flavio Percoco

Attachment: pgptypAhofUUf.pgp
Description: PGP signature

Reply via email to