DevHeads.net

F31 Self-Contained Change proposal: Mono 5

<a href="https://fedoraproject.org/wiki/Changes/Mono_5" title="https://fedoraproject.org/wiki/Changes/Mono_5">https://fedoraproject.org/wiki/Changes/Mono_5</a>

== Summary ==
Update the Mono stack in Fedora from 4.8 to 5.*

== Owner ==
* Name: [[User:tpokorra|Timotheus Pokorra]]
* Email: <a href="mailto: ... at fedoraproject dot org"> ... at fedoraproject dot org</a>

== Detailed Description ==
Upgrading to Mono 5 has been delayed because Mono 5 compiles by
default with csc rather than msc, and makes use of binary reference
assemblies.

Only in the past months an effort was made to build Mono from source,
as described in this upstream issue:
<a href="https://github.com/mono/mono/issues/7445" title="https://github.com/mono/mono/issues/7445">https://github.com/mono/mono/issues/7445</a>
This issue contains a description how the build was done for Debian so
that building from itself is possible, using msc instead of csc, and
rebuilding the reference assemblies from source.

Mono requires itself to build. The Mono version 4.8 currently included
in Fedora is too old to build version 5. At the moment on
[https://copr.fedorainfracloud.org/coprs/tpokorra/mono-5.18/ copr] we
use monolite, a little version of mono compiler, and the .NET 4.7.1
reference assemblies, all shipped in the tarball for first build time.
The sources of the spec file and the required patch files are
currently maintained on
[https://github.com/tpokorra/mono-5.x-fedora/tree/master/mono-5.18
Github].

We would like to request permission to make a one time exception of
the rule for building mono 5.18.0-1 using monolite and the reference
assemblies, later make mono depend again on itself and rebuild mono
5.18.0-2 using mono-5.18.0-1.

Steps for bootstrapping:

* The Monolite binaries are included in the Mono tarball which is
provided by upstream. See also
<a href="http://www.mono-project.com/docs/advanced/monolite/" title="http://www.mono-project.com/docs/advanced/monolite/">http://www.mono-project.com/docs/advanced/monolite/</a>
** Monolite is a minimal binary distribution of mcs. This is the
compiler that is able to build the rest of Mono.
* The binary reference assemblies are included in the Mono tarball
which is provided by upstream. The tarball also includes the sources
of the reference assemblies, which are maintained here:
<a href="https://github.com/dotnet/source-build" title="https://github.com/dotnet/source-build">https://github.com/dotnet/source-build</a>
* In the spec file, we usually delete all dlls and executables before
the build section.
* For the bootstrap, we would once keep the monolite binaries and some
binary reference assemblies.
* In the bootstrap, we rebuild the reference assemblies and include
them in the mono-devel package, as well as the mono compiler.
* After Mono has been built for all primary and secondary
architectures, we enable the deletion of the binaries again in the
spec file.

== Benefit to Fedora ==
Fedora aims to showcase the latest in free and open source software -
we should have the most recent release of Mono 5.x

It will have the ability to run cross-platform applications that
require compatibility with Microsoft .NET Framework 4.7 and later.

We already have issues upgrading packages like sharpziplib because the
latest upstream version uses new compiler features that are not
included in Mono 4.8 (see
<a href="https://bugzilla.redhat.com/show_bug.cgi?id=1601129" title="https://bugzilla.redhat.com/show_bug.cgi?id=1601129">https://bugzilla.redhat.com/show_bug.cgi?id=1601129</a>).

This will also resolve the issues we have because Mono 4.8 does not
build on ppc64 anymore (see
<a href="https://bugzilla.redhat.com/show_bug.cgi?id=1588734" title="https://bugzilla.redhat.com/show_bug.cgi?id=1588734">https://bugzilla.redhat.com/show_bug.cgi?id=1588734</a>).

== Scope ==
* Proposal owners:
Update mono spec and build in copr and/or koji until is ready.
Members of the Mono SIG can rebuild their packages with Mono 5, but
tests with keepass for example show that it works fine without
rebuilding even with Mono 5.18. Rebuild of all packages depending on
Mono can happen during the regular mass rebuild.

* Other developers: N/A (not a System Wide Change)
* Policies and guidelines: N/A (not a System Wide Change)
* Trademark approval: N/A (not needed for this Change)

== Upgrade/compatibility impact ==
N/A (not a System Wide Change)

Tests with keepass without rebuilding keepass worked fine on Mono 5.18.

== How To Test ==
N/A (not a System Wide Change)

== Dependencies ==
This is not a system wide change, but only affects packages depending
on Mono, and should be managed by the members of the [[SIGs/Mono|Mono
SIG]].

Here is a list of packages that require mono-core in Rawhide,
generated with this command: <code>dnf repoquery
--enablerepo=fedora-source --whatrequires mono-core | grep -v
i686</code>

This list even includes packages that are being built from the mono
package (eg. mono-devel and others).

<pre>
Last metadata expiration check: 0:00:56 ago on Fri Mar 1 23:42:49 2019.
COPASI-0:4.24.197-6.fc30.src
avahi-sharp-0:0.7-18.fc30.x86_64
avahi-ui-sharp-0:0.7-18.fc30.x86_64
banshee-0:2.6.2-32.fc30.x86_64
banshee-community-extensions-0:2.4.0-22.fc30.x86_64
bareftp-0:0.3.12-3.fc30.x86_64
bless-0:0.6.0-26.fc30.x86_64
boo-0:0.9.7.0-11.fc30.x86_64
cdcollect-0:0.6.0-32.fc30.x86_64
dbus-sharp-2:0.8.1-8.fc30.x86_64
dbus-sharp-glib-0:0.6.0-6.fc30.x86_64
gbrainy-1:2.3.5-3.fc30.x86_64
gdata-sharp-0:1.4.0.2-24.fc30.x86_64
gio-sharp-0:0.3-21.fc30.x86_64
gkeyfile-sharp-0:0.1-26.fc30.x86_64
gmime-sharp-0:2.6.23-7.fc30.x86_64
gnome-desktop-sharp-0:2.26.0-35.fc30.x86_64
gnome-do-0:0.95.3-13.fc30.x86_64
gnome-guitar-0:0.8.1-28.fc30.x86_64
gnome-keyring-sharp-0:1.0.1-0.28.133722svn.fc30.x86_64
gnome-rdp-0:0.3.1.0-22.fc30.x86_64
gnome-sharp-0:2.24.2-20.fc30.x86_64
gnome-subtitles-0:1.4-3.fc30.x86_64
graphviz-0:2.40.1-44.fc30.src
graphviz-sharp-0:2.40.1-44.fc30.x86_64
gsf-sharp-0:0.8.1-27.fc26.x86_64
gtk-sharp-beans-0:2.14.0-24.fc30.x86_64
gtk-sharp2-0:2.12.45-6.fc30.x86_64
gtk-sharp2-gapi-0:2.12.45-6.fc30.x86_64
gtk-sharp3-0:2.99.3-23.fc30.x86_64
gtk-sharp3-gapi-0:2.99.3-23.fc30.x86_64
gudev-sharp-1:0.1-25.fc30.x86_64
hyena-0:0.5-20.fc30.x86_64
ibm-data-db2-0:4.8.0-17.fc30.x86_64
keepass-0:2.41-2.fc30.x86_64
libappindicator-sharp-0:12.10.0-24.fc30.x86_64
libgpod-sharp-0:0.8.3-27.fc30.x86_64
libsbml-0:5.17.0-13.fc30.src
libsbml-sharp-0:5.17.0-13.fc30.x86_64
libsedml-1:0.4.3-20.fc30.src
libsedml-sharp-1:0.4.3-20.fc30.x86_64
log4net-0:2.0.8-6.fc30.x86_64
mod_mono-0:3.13-3.fc30.x86_64
mono-0:4.8.0-17.fc30.src
mono-addins-0:1.1-10.fc30.x86_64
mono-addins-devel-0:1.1-10.fc30.x86_64
mono-basic-0:4.7-3.fc30.x86_64
mono-bouncycastle-0:1.8.5-1.fc30.x86_64
mono-cecil-0:0.9.6-12.fc30.x86_64
mono-cecil-flowanalysis-0:0.1-0.34.20110512svn100264.fc30.x86_64
mono-data-0:4.8.0-17.fc30.x86_64
mono-data-oracle-0:4.8.0-17.fc30.x86_64
mono-data-sqlite-0:4.8.0-17.fc30.x86_64
mono-debugger-0:2.10-21.fc30.x86_64
mono-devel-0:4.8.0-17.fc30.x86_64
mono-extras-0:4.8.0-17.fc30.x86_64
mono-locale-extras-0:4.8.0-17.fc30.x86_64
mono-mvc-0:4.8.0-17.fc30.x86_64
mono-mvc-devel-0:4.8.0-17.fc30.x86_64
mono-reactive-0:4.8.0-17.fc30.x86_64
mono-reactive-devel-0:4.8.0-17.fc30.x86_64
mono-reactive-winforms-0:4.8.0-17.fc30.x86_64
mono-reflection-0:0.1-0.19.20110613git304d1d.fc30.x86_64
mono-shogun-0:6.0.0-15.fc30.x86_64
mono-tools-0:4.2-12.fc30.x86_64
mono-tools-gendarme-0:4.2-12.fc30.x86_64
mono-wcf-0:4.8.0-17.fc30.x86_64
mono-web-0:4.8.0-17.fc30.x86_64
mono-web-devel-0:4.8.0-17.fc30.x86_64
mono-winforms-0:4.8.0-17.fc30.x86_64
mono-winfx-0:4.8.0-17.fc30.x86_64
mono-yui-0:1.1.2-15.fc30.x86_64
mono-zeroconf-0:0.9.0-25.fc30.x86_64
monobristol-0:0.60.3.1-15.fc30.x86_64
monodevelop-0:5.10.0-14.fc29.x86_64
monodevelop-debugger-gdb-0:5.0.1-4.fc30.x86_64
monodoc-0:4.8.0-17.fc30.x86_64
monodoc-devel-0:4.8.0-17.fc30.x86_64
monosim-0:1.5.2-19.fc30.src
monosim-0:1.5.2-19.fc30.x86_64
mysql-connector-net-0:6.9.9-8.fc30.x86_64
nant-1:0.92-22.fc30.x86_64
ndesk-dbus-0:0.6.1a-27.fc30.x86_64
ndesk-dbus-glib-0:0.4.1-28.fc30.x86_64
newtonsoft-json-0:9.0.1-14.fc30.x86_64
notify-sharp-0:0.4.1-0.6.20130131git28d2f65.fc30.x86_64
notify-sharp3-0:3.0.3-9.fc30.x86_64
nuget-0:2.8.7-8.fc30.x86_64
nunit-0:3.7.1-7.fc30.x86_64
nunit2-0:2.6.4-20.fc30.x86_64
nunit2-gui-0:2.6.4-20.fc30.x86_64
pdfmod-0:0.9.1-20.fc30.x86_64
pinta-0:1.6-13.fc30.x86_64
poppler-sharp-0:0.0.3-23.fc30.x86_64
rescene-0:1.2-19.fc30.src
rescene-0:1.2-19.fc30.x86_64
restsharp-0:105.2.3-12.fc29.x86_64
sharpfont-0:4.0.1-7.fc30.x86_64
sharpziplib-0:0.86.0.518-9.fc30.x86_64
sparkleshare-0:1.5.0-5.fc30.x86_64
taglib-sharp-0:2.1.0.0-10.fc30.x86_64
themonospot-base-0:0.8.2-24.fc30.x86_64
themonospot-console-0:0.1.1-22.fc30.x86_64
themonospot-gui-gtk-0:0.2.2-23.fc30.x86_64
themonospot-plugin-avi-0:0.1.1-22.fc30.x86_64
themonospot-plugin-mkv-0:0.1.1-22.fc30.x86_64
tomboy-0:1.15.9-9.fc30.src
tomboy-0:1.15.9-9.fc30.x86_64
uwsgi-plugin-mono-0:2.0.17.1-7.fc30.x86_64
vim-syntastic-cs-0:3.9.0-4.fc30.noarch
webkit2-sharp-0:0-0.9.20170219gita59fd76.fc30.x86_64
wine-mono-0:4.7.5-1.fc30.src
xsp-0:4.5-3.fc30.x86_64
xsp-tests-0:4.5-3.fc30.x86_64
</pre>

== Contingency Plan ==
* Contingency mechanism: (What to do? Who will do it?) N/A (not a
System Wide Change)
* Contingency deadline: N/A (not a System Wide Change)
* Blocks release? N/A (not a System Wide Change)
* Blocks product? None

== Documentation ==
* <a href="https://fedoraproject.org/wiki/Packaging:Mono" title="https://fedoraproject.org/wiki/Packaging:Mono">https://fedoraproject.org/wiki/Packaging:Mono</a>
* <a href="https://github.com/mono/mono" title="https://github.com/mono/mono">https://github.com/mono/mono</a>
* <a href="https://copr.fedorainfracloud.org/coprs/tpokorra/mono-5.18/" title="https://copr.fedorainfracloud.org/coprs/tpokorra/mono-5.18/">https://copr.fedorainfracloud.org/coprs/tpokorra/mono-5.18/</a>
* <a href="https://github.com/tpokorra/mono-5.x-fedora/tree/master/mono-5.18" title="https://github.com/tpokorra/mono-5.x-fedora/tree/master/mono-5.18">https://github.com/tpokorra/mono-5.x-fedora/tree/master/mono-5.18</a>