Return to Video

Java på Amiga; Jamiga-presentation Uppsala 2015

  • 0:12 - 0:16
    Saturday the 19th September 2015
  • 0:26 - 0:36
    Hi my name is Joakim Nordström, and I'm going to talk about
    Java for Amiga, which is my night time project.
  • 0:38 - 0:42
    At daytime I'm a system developer at Telia here in Uppsala
  • 0:42 - 0:49
    and at night time I'm trying to get java to work on the Amiga
  • 0:53 - 1:04
    The project I'm working is called JAmiga, and I have continued on
    an open source project from 2003-2005
  • 1:04 - 1:11
    It was started by two Germans, Peter Werno and Andre Dörffler.
  • 1:13 - 1:17
    They started creating Java for Amiga.
  • 1:17 - 1:23
    and released a version in 2005, and then nothing much happened
    until around 2009 when I began looking at it.
  • 1:25 - 1:31
    At that time they supported parts of Java 1.4.
  • 1:32 - 1:38
    If you know something about Java, you'll get something from this,
    and if you know nothing about Java, I hope you'll also get something out of this.
  • 1:39 - 1:45
    So hopefully everyone will be happy at the end,
    or everyone will be confused by my ramblings.
  • 1:46 - 1:52
    The target architecture is Amiga, and I'm working at the next generation Amiga.
  • 1:53 - 2:01
    So it isn't the classic Amiga as seen on the first slide I'm focusing, but rather the next generation Amigas.
  • 2:01 - 2:14
    And, believe it or not, Amiga still selling some sort of computers, and then one I have is this with a Power PC processor.
  • 2:14 - 2:23
    And if I'm not mistaken, this is the same processor Mac should've used, if they didn't switch to Intel.
  • 2:26 - 2:35
    The operating system i s Amiga OS 4.1, the latest release.
  • 2:36 - 2:41
    Audience question: can you run old Amiga applications on this new computer?
  • 2:41 - 2:54
    Yes, yes you can, AmigaOS emulates the old Amigas, and can also take advantage of the updated functionality.
  • 2:55 - 3:02
    Audience question: as an old Amiga user, have they fixed the biggest problem, that the entire file system was corrupted when the machine crashed?
  • 3:02 - 3:10
    Yes, there are a few new file systems that aren't as sensitive.
  • 3:10 - 3:13
    Audience question: Have they removed the Guru meditation?
  • 3:13 - 3:19
    Yes, I'm sorry, they've replaced it with the Grim Reaper.
  • 3:24 - 3:29
    So the guru is gone, but problems persist.
  • 3:31 - 3:40
    I'm going to start by showing the parts in a typical Java
    installation, so we'll get a common ground to start from.
  • 3:41 - 3:48
    In essence, it's these four parts. And I'm going to go through them one by one.
  • 3:51 - 3:55
    We'll start with the JVM.
  • 3:56 - 4:02
    The java Virtual Machine is an executable file, usually java.exe.
  • 4:02 - 4:19
    It execute bytecode, and bytecode is the JVM's internal instructions,
    just like an x86 processor has x86 instructions, and PPC has PPC instructions.
  • 4:19 - 4:24
    The JVM translates from bytecode to processor instructions.
  • 4:24 - 4:33
    In the most simple case, it's relatively easy.
    One instructions have its obvious counterpart.
  • 4:33 - 4:37
    Sometimes one bytecode is several processor instructions, and so on.
  • 4:37 - 4:41
    It is however a rather slow process, if you take the easy way.
  • 4:41 - 4:47
    If you want more a advanced JVM, you have to do various smart things.
  • 4:52 - 4:57
    The JVM also handles memory and that stuff.
  • 5:00 - 5:05
    Going right we come to the class library.
  • 5:06 - 5:11
    And this is basically the Java SE standard.
  • 5:11 - 5:16
    The class library are the standard classes you use when youäre developiong Java programs.
  • 5:16 - 5:22
    And it's basically Oracle that decides how this should look.
  • 5:23 - 5:31
    And if you know your Java, you recognize all the standard classes, in the java packages.
  • 5:31 - 5:41
    This is stuff like handling lists, writing to the console,
    open files, and, handling XML and various things.
  • 5:45 - 5:51
    In order to for instance open a file, we need to somehow get
    access to the underlying operating system.
  • 5:52 - 5:55
    For this we have the native library.
  • 5:57 - 6:04
    And this is the way from the class library, which is the same for all JVM's,
  • 6:04 - 6:11
    but the native library is different, depending on the operating system.
  • 6:11 - 6:20
    When we're on Windows, the native library is a DLL, Unix/Linux uses shared objects, and on AmigaOS its library files.
  • 6:23 - 6:27
    And this is basically the parts we have in a JVM.
  • 6:29 - 6:35
    And now I'm going to show what alternatives we have for these parts.
  • 6:35 - 6:42
    The class library and the native library are closely tied together.
  • 6:42 - 6:58
    And there is in essence two choices: OpenJDK from Oracle, and GNU Classpath.
  • 6:58 - 7:05
    Open JDK supports the later Java versions 7, 8 and 9.
  • 7:06 - 7:11
    In the beginning OpenJDK wasn't "Open"
  • 7:14 - 7:32
    Somewhere between Java 6 and 7 that Sun decided to open up JDK and make it open source.
  • 7:33 - 7:38
    Before that, around 1998 the JDK was still closed source.
  • 7:38 - 7:46
    And then some people started GNU Classpath, which is an open source version of the Java standard.
  • 7:46 - 7:53
    They implemented everything in the Java standard from scratch.
  • 7:53 - 8:01
    And when OpenJDK became Open, people stopped developing for GNU Classpath.
  • 8:01 - 8:06
    A lot of people who started with GNU Classpath, are now developing for OpenJDK.
  • 8:06 - 8:10
    Some work at Oracle, and some develop in their spare time.
  • 8:17 - 8:19
    A few different JVM options
  • 8:19 - 8:26
    What you're probably using today is Oracle's hotspot,
  • 8:26 - 8:32
    which is, if I'm not mistaken, a combination of JRockit and HotSpot.
  • 8:32 - 8:40
    JRockit is actually a JVM developed by a Swedish company, later bought by Oracle.
  • 8:40 - 8:48
    Some of the JRockit developers are like working a t Oracle now.
  • 8:49 - 8:54
    Microsoft and MacOS had their own JVMs up until 2001.
  • 8:54 - 9:01
    Or rather, Windows had its to 2001, and Mac had its until OSX.
  • 9:01 - 9:05
    But then they skipped them, and let people decide themselver
  • 9:05 - 9:09
    Then we have onw called "Kaffe".
  • 9:09 - 9:14
    Its open source, and it support GNU Classpath
  • 9:14 - 9:19
    It also exists for Classic Amigas, i.e. the 68k processor.
  • 9:19 - 9:31
    The Jamiga project also has it s own virtual machine, which also can run on Classic Amigas.
  • 9:31 - 9:37
    Then there's a nother variant, GCJ, GNU Compiler for Java.
  • 9:37 - 9:45
    Which compiles either java code, or bytecode, to machine dependent code.
  • 9:45 - 9:51
    So the bytecode is translated to x86 or PPC code.
  • 9:51 - 10:00
    So you get a binary which needs to be compiled for each new architecture.
  • 10:00 - 10:06
    Then I can also mention Dalvik which is Android's VM.
  • 10:06 - 10:14
    And there's a small dispute, if Dalvik isn't in fact JamVM, where
    Google took the JamVM code and called it Dalvik.
  • 10:15 - 10:21
    But, lets focus on this VM JamVM.
  • 10:22 - 10:30
    It's developed since 2003, written in C, with some assembler.
  • 10:30 - 10:34
    It uses Posix threads, and it supports PowerPC.
  • 10:34 - 10:39
    So I thought this was good and interesting.
  • 10:40 - 10:44
    So instead of continuing JAmiga's VM, I began looking at using JamVM.
  • 10:44 - 10:46
    And that is what I've done.
  • 10:47 - 10:55
    In teh beginning it only supported GNU Classpath, but then when OpenJDK became open, it supports that aswell.
  • 10:55 - 11:02
    So when I'm developing, I'm porting JamVM.
  • 11:04 - 11:10
    A small summary.
    The JVM is JamVM
  • 11:11 - 11:19
    The class library is GNU Classpath, since that is what original JAmiga supported.
  • 11:19 - 11:21
    So I've continnued with that.
  • 11:21 - 11:26
    Native libraries are .library, and operating system AmigaOS 4.1.
  • 11:32 - 11:40
    I can talk a bit about the interface of GNU Classpath.
  • 11:41 - 11:46
    From the class library, via the native library down to the operating system.
  • 11:46 - 11:50
    And there's a number of different native libraries.
  • 11:50 - 11:54
    And these libraries corresponds to the Java packages.
  • 11:54 - 12:03
    Comparing this with OpenJDk, they have one big library for all classes
  • 12:03 - 12:12
    A small screen shot over GNU Classpath file structure.
  • 12:12 - 12:18
    On the right side we see the Java standard class "java.lang.System".
  • 12:18 - 12:22
    This has some connectiosn down to the operating system.
  • 12:22 - 12:25
    And those connectiosn can be found in the "java.lang.VMSystm" class.
  • 12:25 - 12:28
    And that is a pretty nice connection.
  • 12:28 - 12:39
    If we have a Java class, wee know which native class we should look in,
    to find connections to the OS.
  • 12:39 - 12:47
    In OpenJDK it isn't quite as nice, but I think they're trying to achieve that.
  • 12:48 - 12:53
    And now we're going to run some Amiga.
  • 12:53 - 13:00
    I'm going to show how it looks when you run a Java program, and what happens in the Java code.
  • 13:00 - 13:03
    So, now there's going to be some code.
  • 13:03 - 13:07
    Here we have a small Java program.
  • 13:07 - 13:13
    And here we have a main method that will print to the console "Hello Uppsala".
  • 13:13 - 13:16
    I.e. "Hello World" in Java.
  • 13:16 - 13:22
    And we're going to see what happens "under the hood".
  • 13:22 - 13:25
    Audience question: is your laptop an Amiga machine?
  • 13:25 - 13:26
    No.
  • 13:26 - 13:28
    No. Its an Ubuntu.
  • 13:28 - 13:31
    The amiga is at home, it's to big to take with me.
  • 13:31 - 13:36
    So this is just pictures.
  • 13:37 - 13:44
    We begin here in "Java.lang.System"
    "System" is a class in the java standard.
  • 13:44 - 13:47
    And then we have an object "out" here.
  • 13:47 - 13:54
    And if we go to the System class, we'll find that "out" is a PrintStream.
  • 13:54 - 14:01
    And if you know your Java, you know that PrintStream has a method "printline",
    which print a line to the stream.
  • 14:01 - 14:09
    Then we need to look at what "out" is initialised to.
  • 14:09 - 14:15
    And then we see this VMSystem class, which has a method "makeStadnardOutputStream".
  • 14:15 - 14:20
    So we move along to that class.
  • 14:20 - 14:30
    And now, this is VMSystem. I.e not a Java standard class, but a aprt of Gnu CLasspath..
  • 14:30 - 14:34
    And here we have a method "makeStandradOutputStream"
  • 14:34 - 14:40
    This returns a PrintStream, which wraps around a BufferedOutputStream
    that wraps around a FileOutputStream...
  • 14:40 - 14:45
    If you know your Java, you know about these streams...
    but we'll ignore that for now.
  • 14:45 - 14:50
    The main thing here is the "FileDescriptor.out".
  • 14:50 - 14:54
    This is just ordinary Java code.
  • 14:54 - 14:57
    But this "FileDescriptor.out" is a bit interesting.
  • 14:57 - 15:02
    So we move on that.
    We end up in a new class: "FileDescriptor"
  • 15:02 - 15:05
    And that has an object named "out" up there.
  • 15:05 - 15:15
    And.. that is a FileDescriptor object, which has an
    parameter FileChannelImpl.out, again.
  • 15:15 - 15:19
    So we move on to the class "FileChannelImpl".
  • 15:19 - 15:26
    And there we find the object "out", somewhere...
    There!
  • 15:27 - 15:32
    And if we look here; here we load our library "javanio".
  • 15:32 - 15:41
    So when this line is executed we're going to open "javanio.library".
    If this was Windows, we would've opened "javanio.dll".
  • 15:44 - 15:46
    We continue with "out".
  • 15:47 - 15:54
    Down here we see "out=ch".
    And "ch" we previously set to a FileChannelImpl.
  • 15:54 - 15:59
    Which is wrapped around a "VMFileChannelImpl.getStandardOut()".
  • 15:59 - 16:06
    So we move along to the "VMFileChannelImpl" class
  • 16:06 - 16:10
    And then we see the method "getStandardOut()"
  • 16:10 - 16:17
    And that methd is here "getStandardOut",
    which return a new VMFileChannel
  • 16:17 - 16:26
    And calls a method "stdout_fd",
    which is here, and it has no method body...
  • 16:26 - 16:32
    However, it has a intereseting word here: "native"
  • 16:32 - 16:38
    This means, that this call will be made to some sort of native library.
  • 16:38 - 16:42
    And now we will go from Java to C.
  • 16:42 - 16:48
    So this is C code.
  • 16:48 - 16:54
    And this is the function that is executed when we call this native method.
  • 16:55 - 17:01
    And, now,m if you know your Amiga,
    you might recognize this "IDOS->Output()".
  • 17:01 - 17:08
    This is a C function in Amigas SDk, which returns a pointer to the console.
  • 17:08 - 17:16
    So the pointer to the console is returned into the Java code,
    and going all the way back...
  • 17:16 - 17:30
    So, somewhere here in the System.out, there is a small pointer to our C function.
  • 17:33 - 17:38
    So this is some explanation to why Java is a bit slow to start up.
  • 17:40 - 17:51
    Aroudn 1995-1996 it took a long time to start a JVM,
    since all these classes had to be loaded on start-up
  • 17:52 - 17:58
    It is also a bit hard to find errors, when you don't know where you are.
  • 17:59 - 18:05
    This call.... er... eh
  • 18:06 - 18:14
    This call, from Java code to C code,
    looks a bit magic.
  • 18:14 - 18:19
    And it is a bit magic,
    but not much.
  • 18:19 - 18:30
    How does the JVM know which native method it should find?
  • 18:30 - 18:39
    From out antive libaray we can export different functions.
  • 18:39 - 18:52
    In the Java standard, it is defined that all native
    functions will have a standard name,
  • 18:52 - 19:00
    with a prefix, followed by the java package, method name and arguments,
    so the VM can find the method.
  • 19:03 - 19:14
    And with these small header definitions in the C code,
    the compile knows that these functions should be exported
  • 19:15 - 19:19
    But this is not how it works on the Amiga.
  • 19:19 - 19:27
    In the Amigas native libraries we only export on function "getLibraryContent"
  • 19:27 - 19:34
    And that returns a strcture where the JVM can do the lookup.
  • 19:35 - 19:44
    So that is one difference in Amiga.
  • 19:46 - 19:49
    Then ,some more code.
    A different example.
  • 19:50 - 19:54
    We're going to look at the class VMSecureRandom.java
  • 19:56 - 20:00
    The VM prefix tells us that there might be antive calls in here.
  • 20:01 - 20:12
    And this class generates a random seed,
    which is used by f.i. cryptography.
  • 20:14 - 20:22
    And one of my users that tested Jamiga,
    found a small crypto library
  • 20:22 - 20:22
    However, when executing it, the entire machine locked up.
  • 20:28 - 20:36
    And this is the VMSecureRandom class.
    The detalis aren't important.
  • 20:36 - 20:41
    But here we have the method "generateSeed",
    that generates our seed.
  • 20:41 - 20:44
    It does this by starting 8 threads that spins,
    and increments a counter,
  • 20:44 - 20:50
    and then randomly they will end,
    and then we'll end up with a random value.
  • 20:51 - 21:01
    And it was here that JVM started 8 threads, got into a (unsolved) race condition.
  • 21:01 - 21:07
    however, I managed to shorten this method to this.
  • 21:07 - 21:12
    Here we instead open a file from the Amiga device "Random:"
  • 21:12 - 21:20
    Which generate random numbers.
  • 21:20 - 21:24
    So, this method became much shorter, and a lot faster.
  • 21:26 - 21:39
    As an example we have here a variant from a Unix flavor,
    wirh a native call to his C code.
  • 21:41 - 21:50
    And this is C++, which with its object orientation maps a bit better to Java.
  • 21:51 - 21:55
    And just for the fun of it, we can look at the Win32 variant.
  • 21:55 - 22:02
    And this just throws an exception, that this
    method isn't supported on Win32.
  • 22:03 - 22:09
    Oh no! The Guru meditation!
  • 22:09 - 22:13
    Not at all planned.
    Oh no. How annoying.
  • 22:13 - 22:20
    Another problem i had,
    was how these threads are handled.
  • 22:20 - 22:30
    I experienced some problem when adding network support
  • 22:32 - 22:38
    I started a Java program
    which opens a socket
  • 22:39 - 22:43
    And this socket should talk to some other server, and send data to it.
  • 22:44 - 22:54
    And I thought it might be nice to put in its own thread,
    so the main thread can do other stuff.
  • 22:54 - 23:00
    We create a socket,
    and a new thread.
  • 23:01 - 23:06
    And then I try to read from the socket here.
  • 23:07 - 23:14
    But then I got this error:
    apparently, the socket, isn't a socket!
  • 23:15 - 23:16
    Much strange.
  • 23:21 - 23:25
    But if you read the Amiga docs...
  • 23:25 - 23:33
    You'll find that this socket
    only exists within this process.
  • 23:33 - 23:42
    There are ways to circumvent this,
    they are bit troublesome.
  • 23:43 - 23:52
    So instead I here created a
    new socket process.
  • 23:52 - 24:01
    So instead of sending the socket ID, I instead send
    a reference to the process.
  • 24:01 - 24:17
    We'll continue with these threads.
  • 24:18 - 24:25
    I mentioned that JamVM uses Posix-thread,
    where AmigaOS has processes.
  • 24:25 - 24:39
    Posix-threads are a bit more lightweight than AmigaOS' processes.
  • 24:39 - 24:46
    The AmigaOS processes has a few connections to DOS library and such.
  • 24:46 - 24:52
    Audience question: do they still have all that old DOS stuff, like BCPL and processes.
  • 24:52 - 24:55
    It's sort of all gone in Amiga OS 4.
  • 24:55 - 24:59
    Audience: they had these heavy processes, and then "threads".
  • 24:59 - 25:03
    Ah, yes, yes, that's still there.
  • 25:03 - 25:16
    An AmigaOS process is a "task", which is more lightweight.
    But the Amiga process has connections to DOS.
  • 25:16 - 25:28
    And the "tasks" can't be used for disk I/O, so if you need that, you need a "process".
  • 25:33 - 25:44
    Here we've started a simple Java class, "Start thread", that actually doesn't start a thread.
  • 25:45 - 25:50
    We're going to see how this looks when its running on the Amiga
  • 25:50 - 26:09
    Each new JVm instance, has beside the main process,
    also have three JamVM specific Amiga processes.
  • 26:09 - 26:13
    We have a Reference handler, Finalizer, and Signal handler.
  • 26:13 - 26:23
    Reference handler handles garbage collection, i.e. frees created objects.
  • 26:24 - 26:30
    The Finalizer runs the "finalize()" method on objects that's been garbage collected.
  • 26:30 - 26:34
    And the Signal handler handles signals sent to the program.
  • 26:35 - 26:39
    So it kind of looks like this.
  • 26:40 - 26:49
    And now I'm going to end this,
    so why not try and end this Java program by pressing Ctrl-C.
  • 26:49 - 26:53
    Ctrl-C is handled by the signal handler.
  • 26:57 - 27:06
    And when it gets the Ctrl-C it executes the Java method System.exit and VMRuntime.exit().
  • 27:06 - 27:12
    And then it also executes the native c-function exit().
  • 27:12 - 27:22
    The problem with running exit(), is that only the Signal handler process is ended.
  • 27:24 - 27:28
    Like i said, Amiga processes are a bit bigger than Posix-threads.
  • 27:28 - 27:35
    If this was Posix-threads, an exit() would've ended the main process,
    which would've ended the Posix-threads aswell.
  • 27:36 - 27:38
    But not in the Amiga case.
  • 27:39 - 27:45
    So instead, we run the Java methods in the Signal handler.
  • 27:45 - 27:50
    And then we send the Ctrl-C signal back to the main process.
  • 27:51 - 27:59
    Receiving that signal, the main process ends the three subprocesses,
    frees memory,closes libraries, and then exists.
  • 28:02 - 28:05
    And with that, I'm almost done.
  • 28:06 - 28:14
    Current status: Jamiga is at version 1.2, downloadable from http://www.os4depot.net.
  • 28:16 - 28:20
    There's also a few automatic updates available.
  • 28:20 - 28:30
    Somewhat completet support for Java 1.5,
    however no graphics or AWT.
  • 28:34 - 28:41
    I also have a small Twitter client,
    which uses Twitter4j.jar
  • 28:42 - 28:49
    Its very simple, this is a command line tool you can run,
  • 28:49 - 28:52
    which creates a small tweet.
  • 28:52 - 28:56
    Fantastic! The technology moves forward, even for the Amiga.
  • 28:57 - 29:02
    The plan ahead is to support OpenJDK
  • 29:03 - 29:11
    And this a small test i ran, which shows that I'm missing java.libraray,
    which I must implement.
  • 29:12 - 29:17
    JamVM supports OpenJDK, out of the box.
  • 29:19 - 29:24
    I'll also try to fix graphics stuff.
  • 29:27 - 29:32
    Just to mention a few ways to build OpenJDK.
  • 29:32 - 29:39
    You can either build it like Oracle wants you to.
  • 29:39 - 29:50
    One though I had was to build OpenJDK, grab the class files, and then just iteratively see what's missing.
  • 29:51 - 30:04
    Alternatively, you can build it using IcedTea,
    which is a way to build OpenJDK using free GNU tools.
  • 30:04 - 30:10
    When you're building using OpenJDK, I think there's still some thing that aren't completely open source.
  • 30:11 - 30:13
    If I'm not mistaken.
  • 30:14 - 30:19
    With IcedTea, you can also do cross compiles, so i can compile Jamiga-stuff on that.
  • 30:19 - 30:26
    Otherwise I have to compile everything on the Amiga, and it actually isn't that fast.
  • 30:28 - 30:32
    And that's where I am right now.
  • 30:32 - 30:42
    If you want more information, you can follow me on twitter or look at my blog.
    If you want info on Amiga, you can go to http://amigaos.se
  • 30:44 - 30:47
    That's it. Thank you!
    Questions?
  • 30:48 - 30:54
    Audience: what was the biggest challenge? Is it this with the threads?
  • 30:54 - 31:05
    Currently its cross-compiling OpenJDK, but previously it was...
  • 31:05 - 31:18
    ... mostly time... to find the time to fix everything.
  • 31:18 - 31:27
    Much of the work isn't very advanced, but it's
    these sort of bugs that is the hardest part.
  • 31:28 - 31:42
    Audience: what is the process model on the new Amiga? Back in the days,
    all memory was shared, and you could peek wherever you wanted.
  • 31:43 - 31:49
    It's not possible to do that anymore, if you do that, the Grim Reaper will appear.
  • 31:49 - 31:58
    Audience: But wasn't that the case in Os 3.1. You could enable the MMU somehow.
  • 31:58 - 32:00
    Eh... er...
  • 32:00 - 32:10
    Yes, that's correct.
  • 32:10 - 32:15
    Audience: but the model was to send pointers.
  • 32:16 - 32:19
    Yes, er, that's still kind of like it is.
  • 32:19 - 32:24
    When you allocate memory, you can tell it to be"public" so other processes can reach it.
  • 32:24 - 32:29
    But you can also say that it's private, which is the preferred way.
  • 32:29 - 32:36
    But when two processes need to talk to each other, the memory needs to be "public".
  • 32:36 - 32:38
    Audience: and "public" is globally, shared?
  • 32:39 - 32:42
    Yes.
  • 32:43 - 32:55
    Audience: Have you found functions not available on Amiga? You mentioned the crypto-secure-random....
  • 32:55 - 33:01
    Audience: ...but have you found something where you had to port a third party library.
  • 33:02 - 33:09
    no.. no.. well.
  • 33:09 - 33:16
    The JVM and GNU Classpath has a few dependencies, but most them are available.
  • 33:16 - 33:19
    Or, well, the Posix-threads doesn't exist.
  • 33:19 - 33:24
    Or, there is a support for Posix-threads, but that implementation lacks a few things.
  • 33:24 - 33:27
    So I made my own Posix-thread implementation which is very Jamiga specific.
  • 33:27 - 33:34
    So you can't use anywhere you like, sadly,
    but it works for JAmiga.
  • 33:35 - 33:42
    Audience: You mentioned AWT, but why not SWT?
  • 33:43 - 33:52
    Er... SWT.... isn't that Swing in the background? Or is that AWT?
  • 33:52 - 34:07
    Audience: SWT has its own native libraray, and is nät oart of the java standard.
  • 34:08 - 34:15
    Audience: so SWT isn't standard, and that's why you don't mention it?
  • 34:16 - 34:39
    Audience: (some discussion on SWT, AWT, etc): SWT is horrible. Don't go there.
  • 34:39 - 34:42
    Sounds like I shouldn't bother with SWT... atleast not now.
  • 34:43 - 34:49
    Audeince: Do you have any more commiters in the project?
  • 34:49 - 34:58
    I had one who helpd with some MorphOS parts, but, no, now its just me.
  • 34:59 - 35:04
    And lately, it's not been much from me either.
  • 35:04 - 35:07
    Audeince: What about test code. Does Rocale have that?
  • 35:07 - 35:17
    Yes... Oracle has some test-sets, JTreg I think its called.
    I haven't looked at that much.
  • 35:17 - 35:24
    However, GNU Classpath has "Mauve", which is an entire test suite for all Java classes.
  • 35:24 - 35:36
    If you look at my blog, I've listed what is tested,
    and I think like 80 % is covered.
  • 35:38 - 35:40
    But, yes. Test suite exists.
  • 35:44 - 35:46
    Thank you!
  • 35:48 - 35:51
    A movie by Joel Edberg
Title:
Java på Amiga; Jamiga-presentation Uppsala 2015
Description:

more » « less
Video Language:
Swedish
Duration:
35:58

English subtitles

Revisions