[Mono-list] About RPMS of .NET packages (using MonoDevelop as a case study)

Philippe Lavoie philippe.lavoie@cactus.ca
Fri, 2 Apr 2004 09:44:31 -0500


This is a multi-part message in MIME format.

------_=_NextPart_001_01C418C1.023823C5
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi folks,
=20
There was a small discussion which stemed from the release of
MonoDevelop. MonoDevelop already has a list of RPMS which are needed for
it to work. However, I think that having multiple RPMS is braking the
NET spirit.
=20
Let me explain. Then flame away.
=20
In .NET, they try hard to break the DLL hell. There are two solutions,
the GAC and copying everything locally. The GAC is work in progress with
mono, so let's focus on the other one.=20
=20
According to the .NET philosophy, every "managed" dependency of
MonoDevelop should be bundled inside its own package and that's it. The
only dependencies should be the unmanaged ones. =20
=20
Maybe have a .NET application binary package could/should/would unbundle
to a structure as follows
=20
Application.exe
Application                      # this would be a sh script which calls
the .exe=20
Application.exe.libs/
Application.exe.libs/lib1.dll
Application.exe.libs/lib2.dll
Application.exe.libs/lib3.dll
Application.exe.config
=20
One of the things I notice with unix is that I need to do a lot of
dependency checking before I get something up and running. The above
structure would remove this (except for unmanaged dependencies) and it
could be optimize when someone compiles by source since the libraries
might already be inside the GAC. The philosophy I think is that hard
disk is cheap and DLL hell is not cheap.=20
=20
Anyway, I liked it when I installed Axiom. It also contained the Tao and
other managed libraries it needed. I didn't need to fetch 3 or 4 more
packages.
=20
In Linux, we also have dependency hell with RPMS when you start to mix
compiling from source and adding RPMS made by different vendors, etc. We
should move away from that model, gtk#.dll could have been bundled with
MonoDevelop. If people want to put all dependencies in a GAC or
something, they will need a real installer. Otherwise it's the copy
everything locally methodology. At least according to the philosophy of
NET. Do we have an installer for mono applications under Unix yet?
=20
What do you guys think?
=20
Philippe Lavoie
=20
   Cactus Commerce         eBusiness. All Business.
 Tel 819.778.0313 x302 * 888.CACTUS.0 * Fax 819.771.0921
www.cactuscommerce.com philippe.lavoie@cactuscommerce.com
=20

------_=_NextPart_001_01C418C1.023823C5
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:st1=3D"urn:schemas-microsoft-com:office:smarttags" =
xmlns=3D"http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii">
<meta name=3DProgId content=3DWord.Document>
<meta name=3DGenerator content=3D"Microsoft Word 10">
<meta name=3DOriginator content=3D"Microsoft Word 10">
<link rel=3DFile-List href=3D"cid:filelist.xml@01C41897.16569D80">
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"PersonName"/>
<!--[if gte mso 9]><xml>
 <o:OfficeDocumentSettings>
  <o:DoNotRelyOnCSS/>
 </o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:SpellingState>Clean</w:SpellingState>
  <w:GrammarState>Clean</w:GrammarState>
  <w:DocumentKind>DocumentEmail</w:DocumentKind>
  <w:EnvelopeVis/>
  <w:Compatibility>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
 </w:WordDocument>
</xml><![endif]--><!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-parent:"";
	margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:"Times New Roman";
	mso-ansi-language:FR-CA;}
a:link, span.MsoHyperlink
	{color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{color:purple;
	text-decoration:underline;
	text-underline:single;}
pre
	{margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Courier New";
	mso-fareast-font-family:"Times New Roman";}
span.EmailStyle17
	{mso-style-type:personal-compose;
	mso-style-noshow:yes;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;
	font-family:Arial;
	mso-ascii-font-family:Arial;
	mso-hansi-font-family:Arial;
	mso-bidi-font-family:Arial;
	color:windowtext;}
span.SpellE
	{mso-style-name:"";
	mso-spl-e:yes;}
span.GramE
	{mso-style-name:"";
	mso-gram-e:yes;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
 /* Style Definitions */=20
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin:0in;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman";}
</style>
<![endif]-->
</head>

<body lang=3DEN-US link=3Dblue vlink=3Dpurple =
style=3D'tab-interval:.5in'>

<div class=3DSection1>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DFR-CA =
style=3D'font-size:
10.0pt;font-family:Arial'>Hi folks,<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DFR-CA =
style=3D'font-size:
10.0pt;font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>There was a small discussion =
which <span
class=3DSpellE>stemed</span> from the release of <span =
class=3DSpellE>MonoDevelop</span>.
<span class=3DSpellE>MonoDevelop</span> already has a list of RPMS which =
are
needed for it to work. However, I think that having multiple RPMS is =
<span
class=3DGramE>braking</span> the .NET =
spirit.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></font=
></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>Let me explain. Then flame =
away.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></font=
></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>In .NET, they try hard to =
break the
DLL hell. There are two solutions, the GAC and copying everything =
locally. The
GAC is work in progress with mono, so let&#8217;s focus on the other =
one. <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></font=
></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>According to the .NET =
philosophy,
every &#8220;managed&#8221; dependency of <span =
class=3DSpellE>MonoDevelop</span>
should be bundled inside its own package and that&#8217;s it. The only =
dependencies
should be the unmanaged ones. <span =
style=3D'mso-spacerun:yes'>&nbsp;</span><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></font=
></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>Maybe have a .NET application =
binary
package could/should/would <span class=3DSpellE>unbundle</span> to a =
structure as
follows<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></font=
></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DFR =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:FR'>Application.exe<o:p></o:p></span>=
</font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>Application<span
style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;
</span># this would be a <span class=3DSpellE>sh</span> script which =
calls the
exe <o:p></o:p></span></font></p>

<p class=3DMsoNormal><span class=3DSpellE><font size=3D2 =
face=3DArial><span lang=3DFR
style=3D'font-size:10.0pt;font-family:Arial;mso-ansi-language:FR'>Applica=
tion.exe.libs</span></font></span><font
size=3D2 face=3DArial><span lang=3DFR =
style=3D'font-size:10.0pt;font-family:Arial;
mso-ansi-language:FR'>/<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>Application.exe.libs/lib1.dll<=
o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>Application.exe.libs/lib2.dll<=
o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>Application.exe.libs/lib3.dll<=
o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>Application.exe.config<o:p></o=
:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DFR =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:FR'><o:p>&nbsp;</o:p></span></font></=
p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>One of the things I notice =
with <span
class=3DSpellE><span class=3DGramE>unix</span></span> is that I need to =
do a lot of
dependency checking before I get something up and running. The above =
structure
would remove this (except for unmanaged dependencies) and it could be =
<span
class=3DGramE>optimize</span> when someone compiles by source since the =
libraries
might already be inside the GAC. The philosophy I think is that hard =
disk is
cheap and DLL hell is not cheap. <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></font=
></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>Anyway, I liked it when I =
installed
Axiom. It also contained the Tao and other managed libraries it needed. =
I didn&#8217;t
need to fetch 3 or 4 more packages.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></font=
></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>In Linux, we also have =
dependency
hell with RPMS when you start to mix compiling from source and adding =
RPMS made
by different vendors, etc. We should move away from that model, gtk#.dll =
could
have been bundled with <span class=3DSpellE>MonoDevelop</span>. If =
people want to
put all dependencies in a GAC or something, they will need a real =
installer.
Otherwise it&#8217;s the copy everything locally methodology. <span
class=3DGramE>At least according to the philosophy of .NET.</span> Do we =
have an
installer for mono applications under <span class=3DGramE>Unix</span> =
yet?<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></font=
></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'>What do you guys =
think?<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></font=
></p>

<pre><st1:PersonName><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:
 10.0pt;mso-no-proof:yes'>Philippe =
Lavoie</span></font></st1:PersonName><span
style=3D'mso-no-proof:yes'><o:p></o:p></span></pre><pre><font size=3D2
face=3D"Courier New"><span =
style=3D'font-size:10.0pt;mso-no-proof:yes'>&nbsp;<o:p></o:p></span></fon=
t></pre><pre><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;mso-no-proof:yes'><span =
style=3D'mso-spacerun:yes'>&nbsp;&nbsp; </span>Cactus Commerce<span =
style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p; </span>eBusiness. All =
Business.<o:p></o:p></span></font></pre><pre><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;mso-no-proof:yes'>&nbsp;Tel 819.778.0313 x302 =
&#8226; 888.CACTUS.0 &#8226; Fax =
819.771.0921<o:p></o:p></span></font></pre><pre><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;mso-no-proof:yes'>www.cactuscommerce.com =
philippe.lavoie@cactuscommerce.com</span><o:p></o:p></font></pre>

<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></font></p>

</div>

</body>

</html>
=00
------_=_NextPart_001_01C418C1.023823C5--