-1 for git submodules. I am really not keen on those; worked with them
while working on Chromium and it was, to be frank, a mess to handle, update
and maintain.

I am rooting for separate repos. Maybe worth a non-binding vote?

Niklas


On 17 July 2014 11:45, Tim St Clair <[email protected]> wrote:

> Inline -
>
> ------------------------------
>
> *From: *"Vladimir Vivien" <[email protected]>
> *To: *[email protected]
> *Sent: *Tuesday, July 15, 2014 1:34:37 PM
>
> *Subject: *Re: Mesos language bindings in the wild
>
> Hi all,
>  Apologies for being super late to this thread.  To answer Niklas point at
> the start of the thread: Yes, I am thrilled to contribute in anyway I can.
>  The project is moving forward and making progress (slower than I want, but
> progress regardless).
>
> Going Native
> Implementing a native client for Mesos is an arduous process right now
> since there's little doc to guide developers.  Once I went through C++ code
> and a few emails, it became easy (even easier than I thought).  If the push
> is for more native client, at some point we will need basic internals to be
> documented.
>
> Mesos-Certified
> Maybe a Mesos test suite can be used to certify native clients.  There are
> tons of unit tests in the code that already validate the source code.
>  Maybe some of those test logic can be pulled out / copied into a small
> stand-alone mesos test server that clients can communicate with to run a
> test suite (just an idea).  This along with some documentation would help
> with quality of native clients.
>
>
> +1.
>
>
> In or Out of Core
> Having native clients source hosted in core would be great since all code
> would be in one location. Go code can certainly co-exist a subproject in
> Mesos.  Go's build workflow can be driven by Make. Go's dependency
> management can work with repo subdirectories (at least according to 'go
> help importpath', I haven't tested that myself).  But, as Tom pointed out,
> the thing that raises a flag for me is project velocity.  If author wants
> to move faster or slower than Mesos release cycles, there's no way to do so
> once the code is part of core.
>
> Anyway, I have gone on long enough.   Looking for ward to feedback.
>
>
> I usually don't tread here, but perhaps a git-submodule works in this
> narrow case.
> Thoughts?
>
>
>
> On Tue, Jul 15, 2014 at 10:07 AM, Tim St Clair <[email protected]>
> wrote:
>
>> Tom -
>>
>> I understand the desire to create bindings outside the core.  The point I
>> was trying to make earlier around version semantics and testing was to
>> 'Hedge' the risk.  It basically creates a contract between core &
>> framework+bindings writers.
>>
>> No one ever intends to break compatibility, but it happens all the time
>> and usually in some very subtle ways at first.  A great example of this is
>> a patch I recently submitted to Mesos where the cgroup code was writing an
>> extra <<endln out.  Earlier versions of the kernel had no issue with this,
>> but recent modifications would cause the cgroup code to fail.  Very subtle,
>> and boom-goes-the-dynamite.
>>
>> Below was an email I sent a while back, that outlines a possible
>> hedge/contract.  Please let me know what you think.
>>
>> --------------------------
>> >
>> > Greetings!
>> >
>> > I've conversed with folks about the idea of having a more formalized
>> release
>> > and branching strategy, such that others who are downstream can rely on
>> > certain version semantics when planning upgrades, etc.  This becomes
>> doubly
>> > important as we start to trend towards a 1.0 release, and folks will
>> depend
>> > heavily on it for their core infrastructure, and APIs (Frameworks, and
>> EC).
>> >
>> > Therefore, I wanted to propose a more formalized branching and release
>> > strategy, and see what others think.  I slightly modified this pattern
>> from
>> > the Condor & Kernel projects, which have well established processes.
>> >
>> > ------------------------------
>> > Basic Idea:
>> >
>> > 1.) Create 2 Main Branches (Stable/Devel-Master based)
>> > 2.) Devel releases are cadence/time based and lightly tested.
>> > 3.) Stable series only accepts bug fixes.  Merge path for all bug fixes
>> > deemed worthy, are through the stable series up to master.
>> > 4.) @ some point devel goes through a *hardning phase* and becomes the
>> new
>> > stable.
>> >
>> > ------------------------------
>> > Version Semantics:
>> >
>> > Major.Minor.Revision-PatchBuild
>> >
>> > Major:
>> >  - Compatibility breakage (usually protocol or api shift), or enough
>> minors
>> >  to justify change.
>>
>>
>> If there is a major version change it should be taken with care and
>> notify downstream usually through the
>>
>> mailing lists.
>>
>>
>> >
>> > Minor:
>> >  - Devel (Odd) - 1.1.x
>> >  - Stable (Even) - 1.0.x
>> >
>> > Revision:
>> >  - Devel - Cadence # Some set of feature enhancements
>> >  - Stable - Bug and security fixes only (Higher bar of entry)
>> >
>> > PatchBuild:
>> >  - Upstream - Whoops our bad, we found a bug or two
>> >  - Downstream - Back-port build variant.
>> >
>> > ------------------------------
>> > Series/Branches:
>> >
>> > Development Series - (Odd Minor #'s): 1.1.x
>> > The development series branches/tags are cadence based, and come off of
>> > master.  All new features are added to master.  All bug fixes should be
>> > merged through the stable series into the master.  It should be ok to
>> > introduce destabilizing features from time to time, provided its agreed
>> upon
>> > by a Sheppard.
>> >
>> > Stable Series - (Even Minor #'s): 1.0.x
>> > Stable series should *only contain* bug fixes.  This way, downstream
>> folks
>> > have a common understanding that behavior should be maintained.  Should
>> > downstream folks wish to back-port features, they can do that at their
>> own
>> > risk.  Every release of the stable series has some measure of quality >
>> then
>> > a +1.  E.g. running some clusters for a period of time (X),
>> >
>>
>>
>> In this model, stable series should be "stable" for writers against the
>> API(s).
>>
>>
>> > Transition from Devel-> Stable:
>> > After some point, the development series needs to go through a hardening
>> > phase.  This could include static analysis + running on some production
>> > cluster for a period of time.  Folks typically plan the transition
>> around a
>> > conference series in order to announce the cool new features.
>>
>>
>> + You could test the bindings during this phase ^ but for stable series
>> they should just work.
>>
>>
>> > ------------------------------
>>
>> Cheers,
>> Tim
>>
>>
>> ------------------------------
>>
>> *From: *"Tom Arnfeld" <[email protected]>
>> *To: *[email protected]
>> *Sent: *Tuesday, July 15, 2014 2:50:47 AM
>>
>> *Subject: *Re: Mesos language bindings in the wild
>>
>> Hey Tim,
>>
>> I can see your point, and am finding it hard to think of any compelling
>> arguments against the issue of fragmentation, but I do have a few thoughts.p
>>
>> That said, I would strongly suggest taking ease-of-use and language
>> specific code structures into consideration. A huge monolithic build system
>> might not be a good thing either, if I'm not mistaken that's why twitter
>> built Pants.
>>
>> Spark is actually a great example here, it's going to be a huge pain to
>> publish PySpark to PYPI because of the way they structure the code, unless
>> you force users to use a bleeding edge version of setuptools to be able to
>> install the software. In the case of PySpark (and other libraries that
>> require compiled dependencies, see Hadoofus on github which I collaborated
>> on this exact issue). It's a nightmare. Projects that work well with
>> python setuptools are projects that are just python, from my experience.
>>
>> That said, it's only a nightmare when you *have* precompiled dependencies
>> that need to be part of the build process. This is no longer the case with
>> the new mesos bindings, so why make it so hard?
>>
>> Take Go as another example (this is similar to installing pip
>> dependencies from github too) - a user can simply plug in the path to a
>> repository and away they go. It's easy, and will rapidly speed up adoption
>> IMO. This isn't something that can easily be done if it's not in it's own
>> repo, and the Mesos repository is pretty huge now.
>>
>> My opinion is largely from a users perspective. However, I would ask the
>> question - how often does the framework API change in such a way that it
>> breaks compatibility? Will there be a need to orchestrate releases among 20
>> language bindings to get a release of the core out, how often? Would it be
>> easier for developers to implement a change and also make that change
>> across all languages at the same time, is that even really going to happen?
>>
>> It's also worth considering release cycles, with all bindings being built
>> into the core, it requires them all the be release together (or it's a git
>> tag pain). Given that lots of the bindings are going to be (and already
>> are) community driven, and only a few people are in charge of the Mesos
>> release cycle (taking at least a few weeks for a release to come out) the
>> pace for each binding has to be the same, and there's no autonomy.
>>
>> My personal feeling is that develop user experience isn't thought about
>> enough is these sorts of situations, and not having a good experience
>> either to use or work on the code is a pain and can slow down adoption.
>>
>> Would be interested to hear what you all think, or if you completely
>> disagree :-)
>>
>> Tom.
>>
>> On Tuesday, 15 July 2014, Tim St Clair <[email protected]> wrote:
>>
>>> So... your response basically capitulates to the fragmentation argument:
>>>
>>>
>>> "Yes we will have binding strewn about of questionable quality that may,
>>> or may not, work with core."
>>>
>>> The point that I'm trying to make is, fragmentation *is not* a good
>>> thing.
>>>
>>> --------------------------------------
>>> Case in point - The Hadoop Ecosystem (fragmentation)
>>>
>>> In order for anyone to make a salient stack of any measure, vendors have
>>> to knit together components into a stack which can then be consumed by the
>>> masses.
>>>
>>> --------------------------------------
>>> Counterpoint - Spark (curating) libraries
>>>
>>> Spark bundles 1st order interface libraries as part of a curated core.
>>>  You are guaranteed that the core will inter-operate, and PySpark is given
>>> 1st class standing.
>>>
>>> --------------------------------------
>>>
>>> This is a bad idea, unless there is a plan to hedge the risk.
>>>
>>> -Tim
>>>
>>>
>>> ----- Original Message -----
>>> > From: "yifan" <[email protected] <http://JAVASCRIPT-BLOCKED;>>
>>> > To: [email protected] <http://JAVASCRIPT-BLOCKED;>
>>> > Sent: Monday, July 14, 2014 7:10:34 PM
>>> > Subject: Re: Mesos language bindings in the wild
>>> >
>>> > Hi Tim,
>>> >
>>> > I found that in zookeeper, they also separate the bindings from the
>>> core.
>>> >
>>> > https://cwiki.apache.org/confluence/display/ZOOKEEPER/ZKClientBindings
>>> >
>>> > So, IMHO, I think it should be the maintainer's responsibility to keep
>>> > the binding in healthy state, with clear documentation of which version
>>> > of the mesos core they supports.
>>> >
>>> > Yifan
>>> >
>>> >
>>> >
>>> > On 07/14/2014 11:30 AM, Tim St Clair wrote:
>>> > > So I fear the fragmentation that can occur if we provide native
>>> bindings
>>> > > outside of the core, unless there is some mechanism for testing, & a
>>> well
>>> > > established versioning scheme.
>>> > >
>>> > > IMHO, priority inversion on 'versioning' should come before bindings
>>> to
>>> > > ensure we adhere to policy.
>>> > >
>>> > > Thoughts?
>>> > >
>>> > > -Tim
>>> > >
>>> > >
>>> > > ----- Original Message -----
>>> > >> From: "Tom Arnfeld" <[email protected] <http://JAVASCRIPT-BLOCKED;>>
>>> > >> To: [email protected] <http://JAVASCRIPT-BLOCKED;>
>>> > >> Cc: [email protected] <http://JAVASCRIPT-BLOCKED;>
>>> > >> Sent: Friday, July 11, 2014 10:22:59 AM
>>> > >> Subject: Re: Mesos language bindings in the wild
>>> > >>
>>> > >> Very exciting. I'd vote +1 for splitting them out. Especially if you
>>> > >> look at the common way of using Go imports, just stick the project
>>> on
>>> > >> GitHub and import it directly using "github.com/mesos/mesos-go" or
>>> > >> similar.
>>> > >>
>>> > >> I guess one argument is that you have more fragmentation of the code
>>> > >> (e.g every library has it's own copy of the protos) but I'm not sure
>>> > >> that's a bad thing.
>>> > >>
>>> > >> Just my two cents. Looking forward to this!
>>> > >>
>>> > >>> On 11 Jul 2014, at 16:59, Thomas Rampelberg <[email protected]
>>> <http://JAVASCRIPT-BLOCKED;>> wrote:
>>> > >>>
>>> > >>> I've started preparing the python bindings to hopefully take this
>>> > >>> route ( https://reviews.apache.org/r/23224/ would love some
>>> reviews!
>>> > >>> ). In fact, there is already a native python implementation of both
>>> > >>> libprocess and the framework apis! (
>>> https://github.com/wickman/pesos/
>>> > >>> , https://github.com/wickman/compactor ).
>>> > >>>
>>> > >>> What are the benefits of bindings being part of the project source
>>> > >>> itself instead of having blessed implementations like mesos-python
>>> > >>> where the source and versioning becomes separate? I've been running
>>> > >>> into difficulties making automake and python's build tools play
>>> nicely
>>> > >>> together. It seems like there'd be more flexibility in general by
>>> > >>> splitting them out.
>>> > >>>
>>> > >>>
>>> > >>>> On Thu, Jul 10, 2014 at 3:57 PM, Niklas Nielsen <
>>> [email protected] <http://JAVASCRIPT-BLOCKED;>>
>>> > >>>> wrote:
>>> > >>>> I just wanted to clarify - native, meaning _no_ dependency to
>>> libmesos
>>> > >>>> and
>>> > >>>> native to its language (only Go, only Python and so on) i.e. use
>>> the
>>> > >>>> low-level API.
>>> > >>>>
>>> > >>>> Sorry for the confusion,
>>> > >>>> Niklas
>>> > >>>>
>>> > >>>>
>>> > >>>>> On 10 July 2014 15:55, Dominic Hamon <[email protected]
>>> <http://JAVASCRIPT-BLOCKED;>> wrote:
>>> > >>>>>
>>> > >>>>> In my dream world, we wouldn't need any native bindings. I can
>>> imagine
>>> > >>>>> having example frameworks or starter frameworks that use the
>>> low-level
>>> > >>>>> API
>>> > >>>>> (the wire protocol with protocol buffers for message passing),
>>> but
>>> > >>>>> nothing
>>> > >>>>> like we have that needs C or JNI, etc.
>>> > >>>>>
>>> > >>>>>
>>> > >>>>>
>>> > >>>>>
>>> > >>>>> On Thu, Jul 10, 2014 at 3:26 PM, Niklas Nielsen <
>>> [email protected] <http://JAVASCRIPT-BLOCKED;>>
>>> > >>>>> wrote:
>>> > >>>>>
>>> > >>>>>> Hi all,
>>> > >>>>>>
>>> > >>>>>> I wanted to start a discussion around the language bindings in
>>> the
>>> > >>>>>> wild
>>> > >>>>>> (Go, Haskell, native Python, Go, Java and so on) and possibly
>>> get to a
>>> > >>>>>> strategy where we start bringing those into Mesos proper. As
>>> most
>>> > >>>>>> things
>>> > >>>>>> points towards, it will probably make sense to focus on the
>>> native
>>> > >>>>>> "bindings" leveraging the low-level API. To name one candidate
>>> to
>>> > >>>>>> start
>>> > >>>>>> with, we are especially interested in getting Go native support
>>> in
>>> > >>>>>> Mesos
>>> > >>>>>> proper (and in a solid state). So Vladimir, we'd be super
>>> thrilled to
>>> > >>>>> start
>>> > >>>>>> collaborating with you on your current work.
>>> > >>>>>>
>>> > >>>>>> We are interested to hear what thoughts you all might have on
>>> this.
>>> > >>>>>>
>>> > >>>>>> Thanks,
>>> > >>>>>> Niklas
>>> >
>>> >
>>> > --
>>> > Gu Yifan
>>> >
>>> >
>>>
>>> --
>>> Cheers,
>>> Timothy St. Clair
>>> Red Hat Inc.
>>>
>>
>>
>>
>> --
>> Cheers,
>> Timothy St. Clair
>> Red Hat Inc.
>>
>
>
>
> --
> Vladimir Vivien
>
>
>
>
> --
> Cheers,
> Timothy St. Clair
> Red Hat Inc.
>

Reply via email to