A more than minimal JVM written in Go and capable of running Java 17 classes.
MPL-2.0 License
Bot releases are hidden (Show)
0.4.0 pre-alpha
This release is a pre-alpha milestone intended only for historical purposes, not for review or testing. This version of Jacobin executes many simple and some complex Java classes, instantiates objects, and calls methods across classes and in libraries. However, there are still many limitations that need to be removed, basic features to be added, and despite the presence of 700+ tests, it needs far more testing.
If you still think you want to run it, then: 0) recognize that we don't advise this; 1) build it (go build from the /src directory), 2) make sure your JAVA_HOME environment variable points to a post-Java11 JDK installation, then run jacobin. If you want to run a simple class, note that Jacobin will run any class containing main() from any directory. However, on the command line, add the .class extension to the file name (this is different from the OpenJDK command line--both in letting you run the class from anywhere and in requiring the .class extension. So, for example: jacobin my.class
JAR files are run using the same syntax as the OpenJDK JVM.
Again, we provide this release as-is and for historical purposes only. We will soon have testable releases, for which we'd love to get your feedback. But this is not one of them.
Code is current as of 28 Feb 2024
Published by platypusguy about 1 year ago
This release is a pre-alpha milestone intended only for historical purposes, not for review or testing. This version of Jacobin executes many simple and some complex Java classes, instantiates objects, and calls methods across classes and in libraries. However, there are still many limitations that need to be removed, basic features to be added, and despite the presence of 600+ tests, it needs far more testing.
If you still think you want to run it, then: 0) recognize that we don't advise this; 1) build it (go build
from the /src
directory), 2) make sure your JAVA_HOME
environment variable points to a post-Java11 JDK installation, then run jacobin. If you want to run a simple class, note that Jacobin will run any class containing main()
from any directory. However, on the command line, add the .class
extension to the file name (this is different from the OpenJDK command line--both in letting you run the class from anywhere and in requiring the .class
extension. So, for example: jacobin my.class
JAR files are run using the same syntax as the OpenJDK JVM.
Again, we provide this release as-is and for historical purposes only. We will soon have testable releases, for which we'd love to get your feedback. But this is not one of them.
Published by platypusguy over 1 year ago
This release is a pre-alpha milestone intended only for historical purposes. This version of Jacobin executes many simple and some complex Java classes, instantiates objects, and calls methods across classes and in libraries. However, there are still many limitations that need to be removed, basic features to be added, and despite the presence of 440+ tests, the Jacotest test bed, and other testing frameworks, it needs more testing to make sure of the robustness of existing features.
Published by platypusguy about 2 years ago
This is a pre-alpha release: a simple proof of concept. This release includes executables for Windows (jacobin.exe) and Mac (jacobin). If you're on other platforms, here's how you build Jacobin: install go (1.18+), download the src directory from this project, run go build
and voilà an executable. Jacobin has no other dependencies.
To run Jacobin:
Jacobin expects to find a JDK installation at the location pointed to by the JACOBIN_HOME environment variable. It supports any version of the JDK up through Java 17.
To run a class: jacobin nameOfClass.class (Note that, unlike the JVM, you need to use the .class extension of the file)
At present, Jacobin runs only a few simple classes. Some of them can be downloaded from the testdata folder. They do simple things: print a string 10 times (Hello.class), perform simple computations and print the result (Hello2.class, Hello3.class). If you want to see the Java source code, it's in the comments for each class in the wholeClassTests directory. For example, the Java source code to Hello3.class is in the comments in Hello3_test.go
Jacobin can be run with many command-line options that provide a lot of information about the classes being loaded (there are almost 1500 classes loaded for any given run) and you can even do instruction tracing. Some of those command-line options are explained in this post.
Published by platypusguy over 2 years ago
This is a pre-pre-alpha release: a simple proof of concept. This release includes an executable (for Windows) and a core subset of Java classes (from the standard Java distribution). To run Jacobin:
go build
and voila an executable. Jacobin, at present, has no other dependencies.To run a class: jacobin nameOfClass.class
(Note that unlike the JVM, you need to use the .class extension of the file)
At present, Jacobin runs only a few simple classes. Four of them can be downloaded from the testdata folder. They do simple things: print a string 10 times (Hello.class), perform simple computations and print the result (Hello2.class, Hello3.class). If you want to see the Java source code, it's in the comments for each class in the wholeClassTests directory. For example, the Java source code to Hello3.class is in the comments in Hello3_test.go
Jacobin can be run with many command-line options that provide a lot of information about the classes being loaded (there are almost 1500 classes loaded for any given run) and you can even do instruction tracing. Those command-line options are explained in this post.