+1

Greg Trasuk

On Feb 10, 2014, at 2:50 PM, Greg Trasuk <tras...@stratuscom.com> wrote:

> 
> As discussion has settled somewhat, I would like to call another vote to 
> accept the latest patch described in 
> https://issues.apache.org/jira/browse/RIVER-432
> 
> The patch removes the archived jar files for Velocity and ASM and replaces 
> them with Apache Ivy scripts that download the jars from Maven Central the 
> first time a build is done.  From then on, the jar files are in Ivy’s 
> repository (for more info, see http://ant.apache.org/ivy).
> 
> Voting will remain open at least until 2000 UTC Feb 13, 2014.
> 
> Cheers,
> 
> Greg.
> 
> 
> On Jan 3, 2014, at 12:57 PM, Greg Trasuk <tras...@stratuscom.com> wrote:
> 
>> 
>> On Jan 3, 2014, at 5:25 AM, Simon IJskes - QCG <si...@qcg.nl> wrote:
>> 
>>> In order to gain some time to discuss this first i will vote -1.
>>> 
>>> First, we decided to NOT remove velocity builder.
>> 
>> When I read the email chain, my impression was that we wanted to remove it 
>> (to quote you Sim, “To be honest, I hate it”), but there was a dependency on 
>> it in the ‘extras’ folder that was added in the trunk branch.  As there is 
>> no ‘extras’ in the 2.2 branch, and that is what this patch applies to, I 
>> thought it was fair to remove VelocityConfigurationBuilder from the 2.2 
>> branch.   Perhaps we should revisit the ConfigurationBuilder approach in 
>> another thread.  For now I’ll spin another patch that doesn’t remove 
>> VelocityConfigurationBuilder.
>> 
>>> 
>>> Second, no need to remove the jars as specified in your own comments on 
>>> RIVER-432.
>>> 
>>> Pulling in external jars at compile time, shall we start here?
>>> 
>>> They are already in the svn. They are already in the build scripts. What 
>>> does this patch fix? No legal problems?
>>> 
>> 
>> Apache policy is somewhat unclear on this point.  One needs to examine the 
>> mailing lists for clues on what we should really do.  I will argue that:
>> 
>> 1 - The fundamental distribution model of Apache is source code, not 
>> binaries.
>> 2 - Distributing binaries is tolerated but not encouraged.  Since the svn 
>> repository can be seen as a distribution point, binaries in svn are also 
>> tolerated but not encouraged.
>> 3 - Downloading dependency binaries at build time is technologically easy, 
>> provides the same guarantees as putting them in cvs, and avoids the question 
>> of effectively distributing someone else’s code.
>> 
>> All these together suggest that although we’re technically OK to put 
>> dependency jars in a “-deps” package (note that the status quo _is_ 
>> unacceptable - at the very least, we need to restructure the dependencies 
>> into a “-deps” binary package), there is some policy uncertainty which we 
>> avoid totally by having dependencies downloaded from a known-good source at 
>> build time.
>> 
>> Let’s examine these points:
>> 
>> 1 - The fundamental distribution model of Apache is source code, not 
>> binaries.  Apache began with httpd.  Back in those days, “Open Source” 
>> software was distributed in source form only, simply because it was mostly 
>> intended for Unix systems (then later Linux).  I recall the first release of 
>> Perl coming down as a ten-part uunet news message.  Part of this 
>> distribution model was practical necessity - System differences made it 
>> necessary to compile your software on the hardware it was going to run on.  
>> Part of it was open-source philosophy.  Having the source code meant that 
>> you could take a look at it and verify that it wasn’t hazardous to your 
>> operations.  
>> 
>> In any case, the way we use to use open source software was (“./configure; 
>> make; make install”).  If the software had dependencies, you built them from 
>> source, for the same reasons.
>> 
>> Now, as time has gone on, we’ve gotten used to having the JVM as a common 
>> runtime, and jar files as a common binary distribution medium.  But the 
>> Apache Foundation’s mandate is to produce open source software that is 
>> freely usable under the Apache License.  That means source code is at the 
>> heart of Apache, despite the rest of the world’s comfort with binaries.  
>> Hence Roy’s statements in (1):
>> 
>>> Class files are not open source.  Jar files filled with class files
>>> are not open source.  The fact that they are derived from open source
>>> is applicable only to what we allow projects to be dependent upon,
>>> not what we vote on as a release package.  Release votes are on verified
>>> open source artifacts.  Binary packages are separate from source packages.
>>> One cannot vote to approve a release containing a mix of source and
>>> binary code because the binary is not open source and cannot be verified
>>> to be safe for release (even if it was derived from open source).
>>> 
>>> I thought that was frigging obvious.  Why do I need to write documentation
>>> to explain something that is fundamental to the open source definition?
>> He’s talking about binary packages, not jar files in svn, but I read that 
>> (and many other emails) as a distaste for binary distributions.
>> 
>> In fact, if you look at Apache httpd’s download page, it doesn’t appear that 
>> the Apache project publishes any Unix or Linux binaries.  They leave that to 
>> other organizations.
>> 
>> 2 - Distributing binaries is tolerated but not encouraged.  Since the svn 
>> repository can be seen as a distribution point, binaries in svn are also 
>> tolerated but not encouraged.
>> 
>> It’s hard to find a single reference that encapsulates this outlook, but 
>> that’s the impression I get from reading the various mailing lists.  For 
>> instance, Sam Ruby says (2):
>>> IMO, our projects release source. So, our projects should not maintain 
>>> object/binary artifacts
>>> in their svn release tree, regardless of license (category a or b).
>> There is some debate on whether the svn tree should be considered a 
>> distribution point.  Incubator releases are regularly called out for not 
>> having “NOTICE” and “RELEASE” files at all reasonable checkout points in 
>> svn.  [LEGAL-26] (https://issues.apache.org/jira/browse/LEGAL-26) concerns 
>> this and remains unresolved.
>> 
>> Doug Cutting (3) says:
>>> On Mon, Sep 16, 2013 at 2:50 AM, Stephen Connolly
>>> <stephen.alan.conno...@gmail.com> wrote:
>>>> * Source control is not an Apache distribution and hence we do not need to
>>>> have LICENSE and NOTICE files in source control, it can be a nice
>>>> convenience, but there is no *requirement*.
>>> 
>>> I think perhaps you're looking for clear lines where things are
>>> actually a bit fuzzy.  Certainly releases are official distributions
>>> and need LICENSE and NOTICE files.  That line is clear.  On the other
>>> hand, we try to discourage folks from thinking that source control is
>>> a distribution.  Rather we wish it to be considered our shared
>>> workspace, containing works in progress, not yet always ready for
>>> distribution to folks outside the foundation.  But, since we work in
>>> public, folks from outside the foundation can see our shared workspace
>>> and might occasionally mistake it for an official distribution.  We'd
>>> like them to still see a LICENSE and NOTICE file.  So it's not a
>>> hard-and-fast requirement that every tree that can possibly be checked
>>> out have a LICENSE and NOTICE file at its root, but it's a good
>>> practice for those trees that are likely to be checked out have them,
>>> so that folks who might consume them are well informed.
>> Again, he’s not talking directly about jar files in svn, however I think his 
>> statement that “since we work in public, folks from outside the foundation 
>> can see our shared workspace and might occasionally mistake it for an 
>> official distribution” applies here.  Fundamentally, the decision on how and 
>> where to distribute ‘velocity.jar’ rightly belongs with the Velocity group 
>> and I don’t think we ought to redistribute it.
>> 
>> 3 - Downloading dependency binaries at build time is technologically easy, 
>> provides the same guarantees as putting them in cvs, and avoids the question 
>> of effectively distributing someone else’s code.
>> 
>> There doesn’t seem to be clear policy in the ASF on this, as evidenced by 
>> the frequent debates on it, and the lack of documentation.  I’ve tried to 
>> lay out an argument that having jars in svn is not encouraged by the ASF 
>> (really, it’s not in line with the ASF’s charter), even if it isn’t 
>> disallowed.  You may disagree, and I won’t claim I’ve made a strong 
>> argument, simply because the policy isn’t clear.  So instead of going 
>> through arguments that amount to differences of opinion on Apache policy, 
>> let’s use a technological solution that is simple, common, and avoids the 
>> question altogether, by automatically downloading the dependencies at build 
>> time.
>> 
>> Projects that use Maven do this automatic download as standard practice 
>> (that’s what Maven does, and that’s what the Maven Central infrastructure is 
>> there to support).  We don’t use Maven, which is fine (our customers have 
>> asked us to make our binaries available in Maven Central, and we’ve done 
>> that).  Apache Ivy is a popular add-on to Apache Ant that provides similar 
>> dependency resolution to an Ant-based build.
>> 
>> I was a little surprised how easy it was to persuade Ivy to get the required 
>> dependencies at build time.  The “ivy.xml” file is 39 lines including the 
>> ASL header (which by the way I forgot to include in the patch - I’ll fix 
>> that).  There are about 50 lines added to ‘build.xml’ to download Ivy and 
>> then download the required jar files
>> 
>> So, given that the status-quo seems to be unacceptable (Roy talks about not 
>> having jar files in the open-source trees, only in “-deps” and “tools” 
>> trees), we have two options:
>> 
>> (a) - restructure the svn repository and the build to allow a separate 
>> “-deps” distribution.  This wouldn’t affect our binary distributions (note 
>> that I’m no longer using the term “binary release”), but to build from 
>> source, a user would have to download a separate archive, unpack it, and 
>> then copy those files into the directory that was unpacked from the source 
>> release.  This option effectively still has us distributing dependent 
>> binaries, which is not the goal of the ASF, just with a disclaimer that says 
>> “this isn’t an ASF release, its just a binary distribution put together by a 
>> committer for your convenience, so don’t feel you should trust it too much”.
>> 
>> (b) - use Ivy to get the jars from Maven Central automatically as part of 
>> the build.
>> 
>> I think (b) is the option that causes the least hassle for our downstream 
>> consumers, and not much hassle for us.
>> 
>> 
>>> Pulling external jars at compile time also makes it more difficult to 
>>> certify the software. In order to certify the software you need to 
>>> establish baseline that will be garanteed the same, even if you pull it 
>>> from the archive 10 years later.
>> 
>> As I said above, Apache’s focus is creating software that can be built from 
>> source, not distributing binaries (note that QCG or another company might 
>> have a different focus, and is perfectly able to distribute binaries under 
>> the Apache license).  I think a reasonably prudent user would ask “How can I 
>> trust the ‘velocity.jar’ that’s included in this binary?”  And the answer 
>> would be either “because I built it from source and installed it in my 
>> corporate repository” (very cautious, but not unheard-of) or “It was 
>> published by the Velocity group to a trusted repository, Maven Central” 
>> (more common).
>> 
>> If you look in the “ivy.xml” file you’ll see that the dependencies are 
>> specified using Maven-style “group-artifact-version” coordinates.  Old 
>> versions are maintained in Maven Central forever.  I suppose it’s possible 
>> that a publisher could convince Maven Central to remove a version for some 
>> reason (security or licensing problems perhaps), but then, would we want to 
>> be distributing that version in a “-deps” package?
>> 
>> I agree that it’s not enough to just say “you need to download such-and-such 
>> jar”, hence the automatic download managed by “Ivy” from Maven Central.
>> 
>>> It is not a high level project that builds on several frameworks. It is a 
>>> lowlevel system library. The stuff below the stack is minimal. The number 
>>> of jars we use is limited. Why bother?
>>> 
>> 
>> In the currently released branches, the dependencies are limited to ASM and 
>> Velocity.  Looking forward to the trunk branch and the qa_refactor branch, 
>> the number of external dependencies seem to be increasing (IMO I don’t like 
>> that, because I also view River as a low level system library, but I’m only 
>> one PMC member).  We need to get in front of the problem before we start 
>> distributing large numbers of dependencies.
>> 
>> This point rolls in with the general question of jar files in version 
>> control.  I was always taught that version control was for source code, and 
>> putting binaries into version control was a bad idea.  In addition, there 
>> are practical problems - with older systems like cvs, even doing an update 
>> or commit effectively downloads the binaries, which slows things down if 
>> there are large binary files.  On newer distributed version control systems 
>> like git or Mercurial, the entire repository, including all versions of 
>> binary artifacts, comes down with the project checkout.  Currently, we have 
>> one version of relatively few jar files in our repository, so it’s not a 
>> major issue.  But it gets worse as time goes on.  So I suggest we work out 
>> the technology now to avoid the problem.
>> 
>>> Gr. Simon
>>> 
>> 
>> Thanks for the questions, Sim.  I hope you’ll come around to removing your 
>> ‘-1’.
>> 
>> Cheers,
>> 
>> Greg
>> 
>> Footnotes
>> ——————
>> 
>> (1) - Roy Fielding - http://s.apache.org/roy-binary-deps-1
>> (2) - Sam Ruby - http://s.apache.org/r5
>> (3) - Doug Cutting - http://s.apache.org/GNP
>> 
>>> On 02-01-14 18:22, Greg Trasuk wrote:
>>>> 
>>>> Hello all:
>>>> 
>>>> Please have a look at the patch mentioned below and cast a vote on it.
>>>> 
>>>> The main idea is to remove the dependency jar files from the source 
>>>> distribution.  As a side effect of using Ivy, it becomes reasonable to 
>>>> remove them from the svn archive as well.  Also, the Velocity dependency 
>>>> was there to support the VelocityConfigurationBuilder.  We had discussed 
>>>> removing that component, so rather than move that dependency to Ivy, I’ve 
>>>> removed VelocityConfigurationBuilder.
>>>> 
>>>> It’s arguable whether the VelocityConfigurationBuider was part of the 
>>>> official Jini API (I see it as a utility, not API), so I don’t think this 
>>>> commit actually requires a vote.  However, it does seem like a significant 
>>>> change to the build process that ought to be reviewed.  So I propose to 
>>>> treat this as a “lazy consensus” vote, and will commit the change to the 
>>>> 2.2 branch if there are no objections in 72 hours (i.e. 1730UTC 20140105).
>>>> 
>>>> At the same time, based on discussions over on 
>>>> gene...@incubator.apache.org, I’ll withdraw my assertion that we can’t 
>>>> have jars in svn.  Those interested may want to check out the thread at 
>>>> http://mail-archives.apache.org/mod_mbox/incubator-general/201312.mbox/%3C01B04CC4-95B8-4A39-BC16-04BAA4269B65%40stratuscom.com%3E
>>>> 
>>>> Cheers,
>>>> 
>>>> Greg.
>>>> 
>>>> On Jan 2, 2014, at 12:05 PM, Greg Trasuk (JIRA) <j...@apache.org> wrote:
>>>> 
>>>>> 
>>>>>   [ 
>>>>> https://issues.apache.org/jira/browse/RIVER-432?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
>>>>>  ]
>>>>> 
>>>>> Greg Trasuk updated RIVER-432:
>>>>> ------------------------------
>>>>> 
>>>>>  Attachment: river-2_2_remove_jars.diff
>>>>> 
>>>>> The attached patch for the 2.2 branch does the following:
>>>>> - removes the 'asm' directory and 'tests/lib' directories which currently 
>>>>> contain the asm library, mockito, and junit jars.
>>>>> - Modifies 'build.xml', 'common.xml', and adds 'ivy.xml' so that the 
>>>>> Apache Ivy ant plugin is downloaded at build time, and then used to 
>>>>> retrieve the libraries mentioned above from Maven Central.  This removes 
>>>>> the need to have the jar files in svn.
>>>>> - Removes (as per discussion 
>>>>> http://mail-archives.apache.org/mod_mbox/river-dev/201211.mbox/%3C509B99E3.6080800%40qcg.nl%3E)
>>>>>  the VelocityConfigBuilder, and associated Velocity jars.  Note that the 
>>>>> 'extras' folder is not present in the 2.2 branch, so Sim's last comments 
>>>>> in the thread do not apply.
>>>>> 
>>>>>> Jar files in svn and src distributions
>>>>>> --------------------------------------
>>>>>> 
>>>>>>              Key: RIVER-432
>>>>>>              URL: https://issues.apache.org/jira/browse/RIVER-432
>>>>>>          Project: River
>>>>>>       Issue Type: Bug
>>>>>>         Reporter: Greg Trasuk
>>>>>>      Attachments: river-2_2_remove_jars.diff
>>>>>> 
>>>>>> 
>>>>>> Recent traffic on the incubator lists has pointed out that including jar 
>>>>>> files for dependencies in the subversion repository and the source 
>>>>>> distributions is against Apache policy.
>>>>>> In River, the following libraries appear in the Subversion repository 
>>>>>> and the source distributions (these are from trunk, a smaller set appear 
>>>>>> in the 2.2 branch):
>>>>>> animal-sniffer
>>>>>> asm
>>>>>> bouncy-castle
>>>>>> dnsjava
>>>>>> high-scale-lib
>>>>>> rc-libs
>>>>>> velocity
>>>>>> They all have to go.  What are we using them for?  As I understand it, 
>>>>>> we were going to remove the VelocityConfigurationBuilder, so that's not 
>>>>>> a problem.  Some of the others are available from Maven Central, so we 
>>>>>> can get them at build time using Ivy or another build tool.  Which ones 
>>>>>> are actually required?  And where did they come from?
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> This message was sent by Atlassian JIRA
>>>>> (v6.1.5#6160)
>>>> 
>>> 
>>> 
>>> -- 
>>> QCG, Software voor het MKB, 071-5890970, http://www.qcg.nl
>>> Quality Consultancy Group b.v., Leiderdorp, Kvk Den Haag: 28088397
>> 
> 

Reply via email to