Linux Compatibility

Coordinator
May 18, 2009 at 3:11 PM

There appears to be an implementation of the .net framework in Linux called DotGNU (http://www.gnu.org/software/dotgnu/).

I haven't experimented with it yet, but this may make it possible to compile and/or run Cronos on Linux systems.  If anyone has any results with this, or knows of better approaches, please feel free to contribute to this discussion.

 

Jul 6, 2009 at 6:58 PM

The Mono Project may give you better results (http://www.mono-project.com/Main_Page).  It's actively developed by Novell, and has the largest install base in the linux distributions that I'm familiar with.

 

Coordinator
Jul 7, 2009 at 1:24 AM

Thanks for the pointer, will check it out when I have a bit more time :)  I need to spend some time on help and documentation first ...

<input id="gwProxy" type="hidden" /><input id="jsProxy" onclick="jsCall();" type="hidden" />

Jul 7, 2009 at 3:58 AM
Edited Jul 7, 2009 at 2:08 PM

The projects compatibility analyzer spits out the following:

It seems that P/Invoke's will have to be turned into native C#, along with a couple of other things, but most of the project will work without modification.

 

MoMA Scan Results
Scan Date: 7/6/2009 10:40:28 PM
MoMA Definitions: Mono 2.4 (Revised)

For descriptions of issues, see MoMA Issue Descriptions.
<tfoot> </tfoot>
    Assembly Version Missing Not Implemented Todo P/Invoke
ABMath.dll 1.0.0.0 0 0 2 0
 
Calling Method Method with [MonoTodo] Reason
void CompileStuff () void CodeTypeReference..ctor (Type) We should parse basetype from right to left in 2.0 profile.
void CompileStuff () void CodeTypeReference..ctor (Type) We should parse basetype from right to left in 2.0 profile.
ExtraControlLibrary.dll 1.0.3467.21976 0 0 0 0
ICSharpCode.SharpZipLib.dll 0.85.1.271 0 0 0 0
MathNet.Iridium.dll 1.0.0.21975 0 0 0 0
PdfSharp.dll 1.2.1269.0 0 0 8 22
 
Calling Method Method with [MonoTodo] Reason
void DoSomeVeryDirtyHacksToMakeItWork () bool Process.WaitForInputIdle ()
void AddString (string, XFontFamily, XFontStyle, double, XPoint, XStringFormat) void GraphicsPath.AddString (string, FontFamily, int, Single, PointF, StringFormat) The StringFormat parameter is ignored when using libgdiplus.
void AddString (string, XFontFamily, XFontStyle, double, Rectangle, XStringFormat) void GraphicsPath.AddString (string, FontFamily, int, Single, Rectangle, StringFormat) The layoutRect and StringFormat parameters are ignored when using libgdiplus.
void AddString (string, XFontFamily, XFontStyle, double, RectangleF, XStringFormat) void GraphicsPath.AddString (string, FontFamily, int, Single, RectangleF, StringFormat) The layoutRect and StringFormat parameters are ignored when using libgdiplus.
void AddString (string, XFontFamily, XFontStyle, double, XRect, XStringFormat) void GraphicsPath.AddString (string, FontFamily, int, Single, RectangleF, StringFormat) The layoutRect and StringFormat parameters are ignored when using libgdiplus.
void Widen (XPen) void GraphicsPath.Widen (Pen) GdipWidenPath isn't implemented in libgdiplus
void Widen (XPen, XMatrix) void GraphicsPath.Widen (Pen, Matrix) GdipWidenPath isn't implemented in libgdiplus
void Widen (XPen, XMatrix, double) void GraphicsPath.Widen (Pen, Matrix, Single) GdipWidenPath isn't implemented in libgdiplus
Calling Method P/Invoke Method P/Invoke Library
DeviceInfos GetInfos (IntPtr) int DeviceInfos.GetDeviceCaps (IntPtr, int) gdi32.dll
DeviceInfos GetInfos (IntPtr) int DeviceInfos.GetDeviceCaps (IntPtr, int) gdi32.dll
DeviceInfos GetInfos (IntPtr) int DeviceInfos.GetDeviceCaps (IntPtr, int) gdi32.dll
DeviceInfos GetInfos (IntPtr) int DeviceInfos.GetDeviceCaps (IntPtr, int) gdi32.dll
DeviceInfos GetInfos (IntPtr) int DeviceInfos.GetDeviceCaps (IntPtr, int) gdi32.dll
DeviceInfos GetInfos (IntPtr) int DeviceInfos.GetDeviceCaps (IntPtr, int) gdi32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) IntPtr NativeMethods.GetDC (IntPtr) user32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) IntPtr NativeMethods.SelectObject (IntPtr, IntPtr) gdi32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) int NativeMethods.GetFontData (IntPtr, uint, uint, Byte[], int) gdi32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) int NativeMethods.GetFontData (IntPtr, uint, uint, Byte[], int) gdi32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) IntPtr NativeMethods.SelectObject (IntPtr, IntPtr) gdi32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) IntPtr NativeMethods.ReleaseDC (IntPtr, IntPtr) user32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) IntPtr NativeMethods.SelectObject (IntPtr, IntPtr) gdi32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) IntPtr NativeMethods.ReleaseDC (IntPtr, IntPtr) user32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) IntPtr NativeMethods.CreateFontIndirect (NativeMethods/LOGFONT) gdi32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) IntPtr NativeMethods.GetDC (IntPtr) user32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) IntPtr NativeMethods.SelectObject (IntPtr, IntPtr) gdi32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) int NativeMethods.GetFontData (IntPtr, uint, uint, Byte[], int) gdi32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) int NativeMethods.GetFontData (IntPtr, uint, uint, Byte[], int) gdi32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) IntPtr NativeMethods.SelectObject (IntPtr, IntPtr) gdi32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) IntPtr NativeMethods.ReleaseDC (IntPtr, IntPtr) user32.dll
void CreateGdiFontImage (XFont, XPdfFontOptions, XPrivateFontCollection) bool NativeMethods.DeleteObject (IntPtr) gdi32.dll
CronosII.exe 1.0.0.0 0 0 0 0
    Totals   0 0 10 22
Coordinator
Jul 18, 2009 at 9:31 PM

This looks very promising.  I just installed mono on my Fedora Core 10 system (yum install mono*), and an older version of Cronos (Release 0.991) just started up immediately when I ran "mono CronosII.exe". Unfortunately for now, using the latest release of Cronos (2.02) I get an "object reference not set to an instance of an object" exception.  I'll have to chase down this bug; it's probably just something sloppy on my part.

Anyway, thanks for the tip.  It looks as though this is the right approach.  I'll post more as I get compatibility issues resolved ...