Packaging Mono 2.4 for Debian

Open Issues

None, Mono 2.4+dfsg-1 was uploaded to Debian/Experimental

Resolved Issues

DFSG

Mono 2.0 now contains a relicensed version of JSON.NET, as the changelog shows:

2008-05-20  Jb Evain  <jbevain@novell.com>
*.cs: all files from JSon.NET are now re-licensed under the
MIT/X11 license, thanks to his author James Newton-King
for relicensing them.

This would be just fine if James Newton-King would be the only copyright holder, source says though:

grep "Copyright" -r ./mcs/class/System.Web.Extensions/System.Web.Script.Serialization/JSON/ | cut -f2 -d ':' | sort | uniq
// Copyright (c) 2007 James Newton-King
// Copyright 2007 Konstantin Triger <kostat@mainsoft.com>

Konstantin Triger is also a copyright holder and I can't verify that he also agreed on the relicensing. This issue will be brought to attention on the mono-packagers-list mailing list. So for now we can't include this part yet till this is resolved.

At quick interview of Jb Evain shows that Konstantin Triger wasn't explicitly asked if he agrees on relicensing:

13:34:33 <meebey> jb: hiya, during Mono 2.0 packaging I have a question popping up. Did you ask Konstantin Triger if he agrees on relicensing his code? (part of Mono's JSON.NET version)
13:34:51 <jb> yeah
13:34:56 <jb> well, it's not Konstantin
13:35:10 <jb> Konstantin used to work at Mainsoft and worked on that
13:35:18 <meebey> James Newton-King is not the only copyright holder
13:35:21 <jb> and his contributions are licensed under the mit/x11
13:35:40 <meebey> jb: the old copyright file didnt say that ;)
13:35:43 <meebey> err source
13:35:51 <meebey> it was Creative Commons
13:36:04 <meebey> so are you him or how do you know? :-P
13:36:35 <jb> I think it's a policy we have, every change to the class lib is licensed under the mit/x11
13:36:54 <jb> but I may be wrong, am not qualified to discuss such things :)
13:37:26 <jb> bbl
13:37:30 <meebey> thats not verifiable
13:37:38 <meebey> I will bring this up on mono-packagers-list

Konstantin Triger agreed to re-license the code:

From: "Konstantin Triger" <kostat@gmail.com>
To: "Andrew Jorgensen" <ajorgensen@novell.com>
Cc: meebey@debian.org
Subject: Re: [mono-packagers] Re-Licensing of Mono's JSON.NET code in Mono 2.0
Date: Tue, 7 Oct 2008 10:22:27 +0200
Yes, feel free to relicense.
Kosta

Mono.Cairo

The mono-cairo.pc file is part of libmono-cairo1.0-cil and links of course with the CLI 1.0 version of Mono.Cairo. mono-cairo.pc needs to be moved to libmono-cairo2.0-cil and changed to use the 2.0 version.

bad /usr/bin/mod

https://bugzilla.novell.com/show_bug.cgi?id=467573

Experimental Buildds Fail Using Mono 2.0

The following packages have unmet dependencies:
  cli-common-dev: Depends: mono-utils but it is not going to be installed or
                           cil-disassembler
  libmono-corlib1.0-cil: Depends: mono-jit (< 1.9.2) but 2.0.1-1 is to be installed
  libmono-corlib2.0-cil: Depends: mono-jit (< 1.9.2) but 2.0.1-1 is to be installed
  libmono-system-web1.0-cil: Depends: mono-jit (< 1.9.2) but 2.0.1-1 is to be installed
  libmono-system-web2.0-cil: Depends: mono-jit (< 1.9.2) but 2.0.1-1 is to be installed
  libmono-system1.0-cil: Depends: mono-jit (< 1.9.2) but 2.0.1-1 is to be installed
  mono-runtime: Depends: mono-jit (= 1.9.1+dfsg-5) but 2.0.1-1 is to be installed
                Depends: mono-gac (= 1.9.1+dfsg-5) but 2.0.1-1 is to be installed
E: Broken packages

22:56 <meebey> Package: mono-utils
22:56 <meebey> Depends: libc6 (>= 2.7-1), libglib2.0-0 (>= 2.16.0), libmono0 (>= 1.9.1), libmono0 (<< 1.9.2), libmono-corlib1.0-cil
22:56 <meebey> that one is clear

22:58 <meebey> Package: cli-common-dev
22:59 <meebey> Depends: debhelper (>= 7.0.8), perl-modules, mono-utils | cil-disassembler, mono-1.0-devel | strong-name-tool, libxml-dom-perl
22:59 <meebey> mono-1.0-devel I bet does it
22:59 <meebey> mono-utils (>= 2.0), mono-devel (>= 2.0)

Possible Workaround

23:38 <MoDaX> meebey: prepend the following in this order to mono-devel build depends
23:38 <MoDaX> meebey: libmono-corlib1.0-cil (>= 2.0), mono-runtime (>= 2.0), libmono-system1.0-cil (>= 2.0), libmono-system-web1.0-cil (>= 2.0), libmono-system-web2.0-cil (>= 2.0)
23:38 <MoDaX> s/build depends/depends/
23:38 <MoDaX> meebey: libmono-corlib1.0-cil (>= 2.0), mono-runtime (>= 2.0), libmono-system1.0-cil (>= 2.0), libmono-system-web1.0-cil (>= 2.0), libmono-system-web2.0-cil (>= 2.0)
23:41 <MoDaX> meebey: and order IS important

00:51 <MoDaX> meebey: sbuild is even more picky than satisfydepends-experimental. that's how depends on mono-devel 2.0.1-1 should look like for it to be installable under sbuild:
mono-runtime (>= 2.0),
 libc6 (>= 2.7-1) | libc6.1 (>= 2.7-1) | libc0.1 (>= 2.7-1),
 libglib2.0-0 (>= 2.16.0),
 libmono-corlib1.0-cil (>= 2.0),
 libmono-corlib2.0-cil (>= 2.0),
 libmono-system1.0-cil (>= 2.0),
 libmono-data-tds1.0-cil (>= 2.0),
 libmono-data-tds2.0-cil (>= 2.0),
 libmono-getoptions1.0-cil (>= 1.0),
 libmono-relaxng1.0-cil (>= 1.9),
 libmono-security1.0-cil (>= 2.0),
 libmono-system-data1.0-cil (>= 1.2.6),
 libmono-system-web1.0-cil (>= 2.0),
 libmono-system-web2.0-cil (>= 2.0),
 libmono-system-runtime1.0-cil (>= 2.0),
 libmono1.0-cil (>= 2.0),
 mono-2.0-devel (= 2.0.1-1),
 mono-gac (= 2.0.1-1)

Long Term Solution?

23:32 <meebey> directhex: mono-devel could dep on mono-libraries for example
23:33 <meebey> the tradeoff is lots of packages being pulled in
23:33 <meebey> thats the main reason we didnt go with it
23:33 <meebey> yet
23:33 <meebey> directhex: e.g. mono-devel >= 2.0, but libmono-something2.0-cil
23:33 <meebey> directhex: so we depend on concrete ABIs
23:33 <meebey> for the libs
23:34 <meebey> in the build-deps
23:34 <meebey> which is kinda destroying the "default target" goal
23:35 <meebey> mono-libraries -> mono-2.0-libraries -> libmono*2.0-cil
23:35 <meebey> mono-1.0-libraries -> libmono*1.0-cil
23:35 <meebey> mono-devel -> mono-librariey
23:35 <meebey> mono-2.0-devel -> mono-2.0-libraries
23:35 <meebey> mono-1.0-devel -> mono-1.0-libraries

Mono.Cecil

Mono.Cecil.dll and cecil.pc are currently part of libmono1.0-cil and needs to be moved into a different package. The mono build system needs to be tweaked to create a 2.0 build of Mono.Cecil as it's currently only 1.0. What makes it more complicated is the fact that there are 2 API versions of cecil around: Mono.Cecil 0.6.8 from the mono source package and Mono.Cecil 0.5 from the mono-cecil source package. They _must_ not conflict! Solution: cecil is now build against CLI 2.0 and shipped in the libmono-cecil-private-cil package.

libmono-system2.0-cil binary deps

This package has a binary dep on libmono0 which should be avoided for space saving reasons. The class System.IO.Compression.?DeflateStream and System.IO.?SerialPorts.?SerialPortStream P/Invoke libMonoPosixHelper.so which is part of the libmono0 package. Should we split that library out into own package or can we override the depedency to Suggests or Recommends? Solution: runtime helper libs were moved from libmono0 to mono-runtime togehter with mono-common and mono-jit.