IBBoard wrote:
Hi...
On 11/05/12 17:38, Atsushi Eno wrote:
IBBoard wrote:
>> ...
Someone in Ubuntu might have decided that GTK# for .Net 4.0 only might
have been a "feature" and hence not a bug when 2.0 apps won't work,
but it seems like a very badly planned and unnecessary change.
That sounds wrong to me. Reasons:
- ABI compatibility is supported only each of 2.0 and 4.0. No one
(Microsoft or Mono) assured cross-ABI compatibility.
I'm writing C# 2.0 code as a LCD (WinXP users and people on older
Linux distros). C# 3.0 and 4.0 code are extensions of 2.0 - everything
is new and added, but backward compatible (as far as I've seen).
What is that Type.op_inequality() incompatibility about then.
Cross-ABI compatibility seemed like half of the point. Java managed it
across lots of versions, and as a language with byte-code/CIL, it
seems like half of the point that you insulate apps against such
things (unlike C/C++ that can balk at the tiniest of API changes on
Linux).
Java hadn't changed byte code across versions in the cost of evolution.
And I totally don't understand what you are complaining about. If you
complain about .NET incompatibility, you should go to Microsoft Connect.
...
- It is like Windows and .NET 1.1. People don't complain that Microsoft
does not ship .NET 1.1 in the latest OSes. By not shipping 1.1, any 1.1
apps could be broken like yours.
Really? I've got some .Net 1.1 apps, and the last I checked, they
still worked with .Net 2.0 and 3.5 installed.
I have no idea why you can blindly believe in 1.1 <-> 2.0 compatibility
while you saw 2.0 <-> 4.0 incompatibility. (Only by *some apps* experience?)
Also, according to Hanselman (who is trustworthy, I believe) only 65%
of computers had .Net 3.5 in 2010
(http://www.hanselman.com/blog/HowManyPCsInTheWorldHaveTheNETFrameworkInstalled.aspx).
That'll have improved because of people upgrading and getting Windows
7, but that is still by no means all of them. It also doesn't account
for Linux users and how many are using old versions of Mono. Why
should I cut out users unnecessarily and jump to 4.0 for an app with
an already small install base and no power to make people change their
mind?
I never suggested to *cut out* users. You are fighting against some ghost.
The script I have appears to work for now, but I'd prefer a better way
to detect when to add the fix to the command-line (something that does
feature detection rather than OS detection, and so will work across
derivatives and other OSes that go the same route). If anyone has any
suggestions or scripts then I'd be glad to hear them.
Recompiling for .Net 4 or rebuilding GTK# just for the sake of Ubuntu
just seems unnecessary.
2.0 will be deprecated and will vanish from mono later, like we killed
1.1 profile in the past. Building for 4.0 is absolutely the right
direction.
I'd like to use .Net 4 features and target it, but for what my app is,
saying "sorry, you need to download a big huge framework update" just
isn't a tenable position. One of my previous apps had enough
rejections in the days when .Net 2.0 was in a WinXP SP just because it
was written in .Net 1.1 (which was common) and people didn't want to
get an extra dependency that they didn't have for some reason.
I don't really understand your problem. Just provide 2.0 for Windows and
4.0 for Linux.
And this rather sounds like "I don't want to build 2.0 packages, so you
build 2.0 packages for me instead" ...
No, it sounds like "my app is small, and rebuilding GTK# just for the
sake of Ubuntu is a waste of my time compared to working on features,
as well as being a likely cause of problems for me and upset users
when they either a) get confused by the extra "with GTK#" download or
b) have a larger download (that may or may not conflict with system
libraries) just because of a distro they don't use or c) hit bugs when
my builds of GTK# don't play nicely with theirs".
Just build your app based on 4.0 profile for Ubuntu so that you don't
have to keep complaining about Ubuntu decision which should be good for
most users.
To make it clear, I write to explain *why* things could be "broken" and
wrote hints on how to fix it, and why Ubuntu direction is better. In
that context, I should have added this: selecting "required" package is
always important for distros. If they select one package, it will eat
disk space. Providing huge package for cosmetic need (e.g. issues that
developers can avoid) is *bad* for them. Keep in mind that as many
packages as you demand in the default installation it will harm users'
ability by reducing other useful software.
I hope you understand their business and judge it with fair mind.
Atsushi Eno
Thanks.
Atsushi Eno
Thanks,
IBBoard
On 11 May 2012 09:00, Atsushi
Eno<[email protected]> wrote:
Hello,
To my understanding, Ubuntu does not support GTK# for .NET 2.0 based
mono
runtime, which is not a bug. You are trying to run an app with
insufficient
software components on an OS. If you want to use the feature that
the OS
does not provide, you'll have to provide that by yourself, like it
wouldn't
make sense to bug Microsoft that WP7 does not ship with System.Data.
(In other words, while .NET 2.0 could be the LCD, gtk# on .NET 2.0 is
not .)
I believe you could build and provide gtk# which is based on .NET 2.0
profile. Putting package for public would help Ubuntu users. Or
Ubuntu/Debian people may already have such packages apart from
official
repos. AFAIR there are some "2.0-cil" packages in Ubuntu.
Atsushi Eno
IBBoard wrote:
It appears there is a problem with running older .Net apps on the
latest
versions of Ubuntu. If you compile for .Net 2.0 (perhaps because
that is
your lowest common denominator, because you are working
cross-platform and
you know some people will still be using WinXP without the huge .Net
3/3.5/4
updates) and run it on Ubuntu then you currently get an instant
crash with a
message like "Missing method System.Type::op_Inequality(Type,Type) in
assembly /usr/lib/mono/2.0/mscorlib.dll, referenced in assembly
/usr/lib/mono/gac/gtk-sharp/2.12.0.0__35e10195dab3c99f/gtk-sharp.dll"
It looks like this problem is quite prevalent and problematic
(https://bugs.launchpad.net/ubuntu/+source/mono/+bug/882501,
http://stackoverflow.com/questions/10473868/mono-gtk-hello-world-failing-missing-method,
and the rest of Google). The two fixes people have are "recompile"
(only an
option if you're *only* targeting Ubuntu and want to use v4.0) or
"add the
--runtime=v4.0 switch" to force a 2.0 app to run as 4.0.
Based on the assembly mentioned in error and what I've picked up
online,
am I right in understanding that this is a purely Ubuntu-caused
problem
because GTK# is now build with the .Net 4.0-compatible compiler? Is
there
any way they can fix this, or are we stuck with it? And are there any
sensible and non-hackish ways to work around this in the meantime?
I'm working on my own Bash wrapper at the moment to fix this only
when
necessary
(http://dev.ibboard.co.uk/repos/IBDev-IBBoard.WarFoundry.GUI.GTK/files/tip/WarFoundry.sh)
but I'm sure there must be better ways to do it.
Thanks.
_______________________________________________
Mono-list maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list
_______________________________________________
Mono-list maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list
_______________________________________________
Mono-list maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list
_______________________________________________
Mono-list maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list