[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [PROPOSAL] New Virtual Packages and way to handle Classpath



Hallo Dalibor,

* Dalibor Topic wrote:
>thanks for taking the time to write a well thought-out, and pointed
>response. I wasn't sure whether my reply was a bit vitriolic ;)

:) This discussion is nothing against being 'Proponent' of a new
german newsgroup...

[free, but not full featured]
>> featured. Most likely, this will end up in many people complaining,
>> why there program isn't running.
>Yes. Send them our way so we can educate them to fix the problems they are
>complaining about by writing the missing pieces ;)

I'd actually do this (I haven't have time yet to test eclipse with
kaffe...). But I know my skills and they are definitelly not enough to hack
on kaffe or any other 'bigger' non java app. Just by packaging
eclipse, I'm learning more about binary libs than I ever thought I
would...

>I think we have a different perception of communities that free java
>caters to: for you, it's mostly about making life easier for users of
>java applications.

Yes. IMO debian policy should go with this approach.

>I'm not quite sure what is debian's target audience.

Seeing that debian is famous about 'that it works', I would say, that
we should have a policy, which:

* makes all our packages working with every JVM, which will run it:
  . free ones
  . unfree ones by a well defined API and a installer script
* make all alternatives of java/javac working in the same way [1]
  
[1] I just got a mail form a user, who wanted to try swt with sableVM
and kaffe. the first printed a 'error: todo' and the second got him
into the 'kaffe -classpath' doesn't add rt.jar. The second error could
very simple be prevented by a wrapper script.

>It wouldn't work even if there is a way to merge the classes together into the
>same classpath: both nio and net need native libraries to be impemented fully,
>and trying to get internal native libs from one VM to work with another is very
>hard, in my experience, due to different internal JNI replacements (i.e. KNI on
>kaffe, CNI on gcj), for example.

Are you telling me, that I can't build jni libs (libswt is one), which
will run on nonfree (which are in my experience working) and kaffe and 
gcj? 

>What I think of is that there should be a way to say:
>this VM provides a certain API (obtained by running japitools on that VM's jar
>files, as a package kaffe-japi, for example).
>this application requires a certain API (obtained by running something similar
>to figure out all the fields, method, classes etc an applicastion can access,
>as package tomcat-reqs for example)
>then matching could be done either on the fly, 
>by apt,

Will not work without Conflicting with every other JVM. Or more
detailed virtual packages.

>by fetching the reqs
>file for the java application and checking it against installed java runtimes,

might work, when we add a wrapper for every free bin/java and this
wrapper adds the required API to the bootclasspath. That was my
intention when I wrote the 'have all the API on its bootclasspath'

This would basicly mean the 'try to get as much sun-java like as
possible' approach.

>or statically, when an application package is uploaded to debian, resulting is
>a  specific dependency list of VMs that *could* run the application.

This is the 'API for unfree VMs' and others by hand approach. 

>the current approach is not finegrained enough to allow for such obscurities
>like kaffe, although it doesn't implement full 1.4 APIs, running saxon just
>fine.

IMO, no mechanism will be fine grained enough, to allow to set this
dependencies automagically.

>> -> provides alternatives for java-nio, java-net and java-nio-net
>I think a better solution would be to put API information in a separate
>package.

This would mean, that we have to split rt.jar. Will kaffe or any of
the other VMs still work then? It will be hell for packagers, as they
basicly have to rewrite the original build prozess.

>> I know and thats why I want to have both package try to get a (mostly)
>> complete bootclaspath by adding the required java package (from other
>> debian packages) in a wrapper. 
>That is bound to cause interesting trouble with native methods being (ab)used
>accross VMs.

First of all, it will work with packages like xerces, which already
now can be updated 'endorsed dir' or so, or simple adding a newer
version to bootclasspath. 

>The trouble is: a lot of open office's java code was written by complete morons
>working for Sun. It uses sun's internal classes everywhere. It's basically
>undocumented. Currently, the code in question is undergoing a rewrite, after
>Chris and I made some fuss about its miserable quality.

:) Two weeks ago there was patch on debian-ooo about 'removing the
need for java'.

BTW, I always wanted to ask, why you need java for OOo. The only place
I found would be XML handling (xalan) and the UNO bridges. Both should
be relative easily be replaced (first by a diffrent whatever Prozessor
and the second by simple removing it). Do you know some more?

>If you want another example: some idiot working on OpenEJB thought he should
>have access to the bootclasspath by using reflection to read the undocumented,
>private field in Sun's ClassLoader class. Of course, it will only work as long
>as Sun doesn't change that field's name. It won't work on anything else but
>sun, that's for sure. So kaffe can't run openEJB, and probably never wil, until
>someone there starts reviewing their code.

eclipse has a similar thing, which just got a patch by the RedHat gcj
guys... Hope it will be in soon. Until now you have to set a
properties, so that eclipse can use it to start programms. Or so I
understood it.

>My point is, that while in a lot of cases the free VMs are not up to the task,
>in a lot of other cases it's just because the applications are written by lazy
>kids disguising as developers.

This could be a task when you package such a app... Or it will never
be included in debian. But this is not the point. Currently, we don't
even work well with app, which are doing 'the right thing'... 

>It's not an interface, AFAIK. It's a regular class and we'd have to reverse
>engineer it. Then of course, people couldn't run Sun's javac on kaffe anymore,
>since our stub would automatically replace com.sun.whatever.javac.Main. It
>would be a bad hack to make an even worse hack work.

Hm, eclipse uses 
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>

Seems that it extends
org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter

>No thanks, I prefer to root out the cause. ;)

If you can. I'm more the 'make it work' guy...

>it loads the class directly from tools.jar. If that fails, ant fails, unless
>you pass it a build compiler property with a different compiler *for which an
>ant 'driver' class exists*. Not exactly what I would call superb code.

IMO, that is wrong. The eclipse genrated build.xml is setting
build.compiler, when eclipse is running. I don't think they would, if
in all tested cases (SUN, IBM) they would get the internal compiler.
It should at least be 'first build.compiler and then internal'.
Anyway, I haven't seen ant internals...

>If you take a look around on mandrake forums, for exmaple, most users,
>recommend getting 'real java from sun'  because their LimeWire client doesn't
>run with kaffe or gcj. So what? Let them go and get it. But don't encourage
>them ;)

I don't encourage them. But IMO, we shouldn't make it hard to use
debian java packages without some handmade magic (like equivs) or
depending on BD packages (which currently are outdated :( )

>Yeah, but I don't really care about sun's java packages ;) If they
>want to package their java for debian, fine. If they don't, I don't
>understand why you're all so keen on doing it, instead of trying to
>make the free alternatives better.

Im of the 'whatever works best' group :) At least when I can't help
myself to somthing better.

>I mean, this is debian, it's all about writing, using and promoting free
>software, right? I'm not a debian developer, but that was my impression as an
>innocent bystander.

It's also about 'our users' and from that POV, we should react to the
situation, that there are unfree java packages...

>> The other thing is, that IMO noone wants to run tomcat under full load
>> on a JVM, which doesn't do any JIT compilation. This is real world, 
>> too...
>Then those people should write a jitter for the VM of their choice. 

Aehm, yes, I will try that in my next break :)

>Kaffe actually comes with a jitter on many platforms.

Sorry, I didn't know that. This will be the problem with eclipse
and gcj, as every added plugin will run in interpreter mode.

Thansk for your great responses!

Jan
-- 
Jan Schulz                     jasc@gmx.net
     "Wer nicht fragt, bleibt dumm."



Reply to: