Author: xavier
Date: Sun Oct 21 01:40:35 2007
New Revision: 586872

URL: http://svn.apache.org/viewvc?rev=586872&view=rev
Log:
slight review of best practices: talk about security as argument for enterprise 
repository + some minor updates

Modified:
    incubator/ivy/core/trunk/doc/bestpractices.html

Modified: incubator/ivy/core/trunk/doc/bestpractices.html
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/doc/bestpractices.html?rev=586872&r1=586871&r2=586872&view=diff
==============================================================================
--- incubator/ivy/core/trunk/doc/bestpractices.html (original)
+++ incubator/ivy/core/trunk/doc/bestpractices.html Sun Oct 21 01:40:35 2007
@@ -40,9 +40,10 @@
 This is usually not a valid recommendation for open source projects, but for 
the enterprise world we strongly suggest to avoid relying on a public 
repository like maven ibiblio or ivyrep. Why? Well, there are a couple of 
reasons:
 <ul>
 <li>control</li> The main problem with this kind of public repositories is 
that you don't have control over the repository. This means that if a module 
descriptor is broken you cannot easily fixed it. Sure you can use a chain 
between a shared repository and the public one and put your fixed module 
descriptor in the shared repository so that it hide the one on the public 
repository, but this makes repository browsing and maintenance cumbersome. 
-Even more problematic is the possible updates of the repository. We know that 
versions published in such repositories should be stable and not be updated, 
but we also frequently see that a module descriptor is buggy, or an artifact 
corrupted. We even see sometimes a new version published with the same name as 
the preceding one because the previous one was simply badly packaged. This can 
occur even to the best, it occured to us with Ivy 1.2 :-) But then we decided 
to publish the new version with a different name, 1.2a. But if the repository 
manager allow such updates, this means that what worked before can break. It 
can thus break your build reproducibility.
-<li>reliability</li> Ibiblio maven repository is not particularly well known 
for its reliability (we often experience major slow down or even complete break 
of the site), and ivyrep is only supported by a small company (yes we are only 
a small company!). So slow down and site hang occurs also. And if the 
repository you rely on is down, this can cause major slow down in your 
development or release process.
-<li>accuracy</li> a public repository usually contains much more than what you 
actually need (except maybe ivyrep which certainly features much less than what 
you need :-)). Is it a problem? We think so. We think that in an enterprise 
environment the libraries you use should step through some kind of validation 
process before being used in every projects of your company. And what better 
way to do so? Setup an enterprise repository with only the libraries you 
actually want to use. This will not only ensure a better quality of your 
application dependencies, but help to have the same versions everywhere, and 
even help when declaring your module dependencies, if you use a tool like 
IvyDE, the code completion will only show relevant information about your 
repository, with only the libraries you actually want to see.
+Even more problematic is the possible updates of the repository. We know that 
versions published in such repositories should be stable and not be updated, 
but we also frequently see that a module descriptor is buggy, or an artifact 
corrupted. We even see sometimes a new version published with the same name as 
the preceding one because the previous one was simply badly packaged. This can 
occur even to the best, it occurred to us with Ivy 1.2 :-) But then we decided 
to publish the new version with a different name, 1.2a. But if the repository 
manager allow such updates, this means that what worked before can break. It 
can thus break your build reproducibility.
+<li>reliability</li> Maven repository is not particularly well known for its 
reliability (we often experience major slow down or even complete break of the 
site), and ivyrep is only supported by a small company (yes we are only a small 
company!). So slow down and site hang occurs also. And if the repository you 
rely on is down, this can cause major slow down in your development or release 
process.
+<li>accuracy</li> a public repository usually contains much more than what you 
actually need. Is it a problem? We think so. We think that in an enterprise 
environment the libraries you use should step through some kind of validation 
process before being used in every projects of your company. And what better 
way to do so? Setup an enterprise repository with only the libraries you 
actually want to use. This will not only ensure a better quality of your 
application dependencies, but help to have the same versions everywhere, and 
even help when declaring your module dependencies, if you use a tool like 
IvyDE, the code completion will only show relevant information about your 
repository, with only the libraries you actually want to see.
+<li>security</li> the artifacts you download from a module repository are 
often executable, and are thus involved in security concerns. Imagine a hacker 
replacing commons-lang by another version containing a virus? If you rely on a 
public repository to build your software, you expose it to a security risk. You 
can read more about that in this <a 
href="http://www.fortifysoftware.com/servlet/downloads/public/fortify_attacking_the_build.pdf";>Forrester
 article</a>.
 </ul>
 Note that it's not because you use an enterprise repository that you have to 
build it entirely by hand. Ivy features an [[ant:install]] task which can be 
used to install modules from a repository to another one, so it can be used to 
selectively install modules from a public repository to your enterprise 
repository, where you will then be able to ensure control, reliability and 
accuracy.
 
@@ -50,7 +51,7 @@
 Ivy is very flexible and can accomodate a lot of existing repositories, using 
the concept of <a href="concept.html#pattern">patterns</a>. But if your 
repository doesn't exist yet, we strongly recommend to always use the 
organisation and the module name in your pattern, even for private repository 
where you put only your own modules (which all the same organisation). Why? 
Because Ivy listing feature rely on the token it can find in the pattern. If 
you have no organisation token in your pattern, Ivy won't be able to list the 
(only?) organisation in your repository. And this can be a problem for code 
completion in IvyDE, for example, but also for repository wide tasks like 
[[ant:install]] or [[ant:repreport]].
 
 <h1>Public ivysettings.xml with public repositories</h1>
-If you create a public repository, provide an url to corresponding <a 
href="configuration.html">ivysettings.xml</a>. It's pretty easy to do, and if 
someone want to leverage your repository, he will just have to call 
[[ant:configure]] with the url of your ivysettings.xml, or <a 
href="configuration/include.html">include</a> it in its own configuration file, 
which makes it really easy to combine several public repositories.
+If you create a public repository, provide an url to corresponding <a 
href="configuration.html">ivysettings.xml</a>. It's pretty easy to do, and if 
someone want to leverage your repository, he will just have to load it with 
[[ant:settings]] with the url of your ivysettings.xml, or <a 
href="configuration/include.html">include</a> it in its own configuration file, 
which makes it really easy to combine several public repositories.
 
 <h1>Dealing with integration versions</h1>
 Very often especially when working in a team or with several modules, you will 
need to rely on intermediate, non finalized versions of your modules. These 
versions are what we call integration versions, because their main objective is 
to be integrated with other modules to make and test an application or a 
framework. 


Reply via email to