7 ms·
Java JDK 1.0 (1996)
- javap 5y agoInteresting, Java 1.0 has 6 top level packages Java.applet Java.awt Java.io Java.lang Java.net Java.util
- Flex247A 5y agoInteresting! The code looks very readable!
- gzer0 5y agoI came across this post [1] in which the author discovers an undocumented feature in the JVM. "Although the first stable release of Java used bytecode version 45.3, the JVM will actually accept classfiles with versions starting at 45.0. Furthermore, there’s an undocumented feature in the JVM where it parses Code attributes slightly differently when the version is 45.0 - 45.2. In a normal classfile, the stack, locals, and code length fields of the Code attribute have lengths of 2, 2, and 4 bytes respectively, but in a pre-45.3 classfile, the JVM expects them to be 1, 1, and 2 bytes instead. Normally, this means that a pre-45.3 classfile produced by ASM will just crash when run on the JVM because the JVM encounters garbage data while parsing and rejects it. However, if you are very careful, it is possible to construct a classfile that is valid when parsed with the 2,2,4 widths, and also valid when parsed with 1,1,2, but parses as different code in each case. This means that it is possible to craft a classfile that executes one piece of code when run on the actual JVM and displays a completely different set of fake code when viewed with reverse engineering tools" TL;DR JVM contained an undocumented feature in the JVM where it parses Code attributes slightly differently when the version is 45.0 - 45.2. The stack, locals, and code length typically has 2,2,4 bytes rspectively; in pre-45.3 classfiles, the JVM expects them to be 1,1,2 bytes instead. [1] https://blog.polybdenum.com/2021/05/05/how-i-hacked-google-app-engine-anatomy-of-a-java-bytecode-exploit.html https://blog.polybdenum.com/2021/05/05/how-i-hacked-google-a... [2] https://github.com/openjdk/jdk/commit/eedc99c9ab2647f0233e4899a2976eb6f3095319 https://github.com/openjdk/jdk/commit/eedc99c9ab2647f0233e48...
- mobilio 5y agoIt's discussed here: https://news.ycombinator.com/item?id=27064800 https://news.ycombinator.com/item?id=27064800
- fnord77 5y agowas expecting the actual vm source code, which I believe is written in C and is an engineering marvel. This looks like just the end user install package
- unixhero 5y agoInteresting! Well is the sourcecode for the Java JVM not open and available?
- brabel 5y agoYes, and it's available on GitHub now! Here's the heap implementation, for example: https://github.com/openjdk/jdk/blob/master/src/hotspot/share/memory/heap.cpp https://github.com/openjdk/jdk/blob/master/src/hotspot/share... The GraalVM is a Java implementation of the Java compiler and VM and it's also on GitHub: https://github.com/oracle/graal https://github.com/oracle/graal
- gzer0 5y agohttps://github.com/ufuu/JDK10/blob/main/misc/DOCS/ACROBAT/DOCS_PDF/vmspec.pdf https://github.com/ufuu/JDK10/blob/main/misc/DOCS/ACROBAT/DO... Might not be exactly what you are looking for, but I just added the original VM spec PDF going over the JVM architecture in C
- chrisseaton 5y agoThe original JDK didn't have the kind of things you're probably thinking of when you talk about an engineering marvel, like the JIT and advanced GCs.
- zozbot234 5y agoNote that this is under a proprietary license (see toplevel COPYRIGHT code). Given the rather messy history around the Java API, it might be legally problematic to look at this code.
- akie 5y agoI just did a legally problematic thing.
- deleted 5y ago[deleted]
- johnwheeler 5y agoI doubt Oracle is going to sue
- andrewshadura 5y agoI wouldn't at all be surprised if they did.
- hota_mazi 5y agoYeah, they're not the kind of company that sues.
- anoncake 5y agoOne Reasonable Adult Called Larry Elison
- johnwheeler 5y agoJust let me know when they sue.
- dvfjsdhgfv 5y agoA nice C&D will suffice.
- emma-w 5y agoThat was my risky click for the day!
- trias 5y agohttps://github.com/ufuu/JDK10/blob/main/src/src/java/util/Date.java https://github.com/ufuu/JDK10/blob/main/src/src/java/util/Da... > private int tm_year; /* years since 1900 */ when you have 4.3 billion years to choose from but decide for 1900.
- vbezhenar 5y agoint is signed.
- rzzzt 5y agoYou don't want to go back 2 billion years from 1900?
- froh 5y agoon x86 and arm. not on s390.
- rzzzt 5y agoIn a Java Virtual Machine, it is a 32-bit signed value: https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.3.1 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.ht...
- froh 5y agomy bad you're right. I got confused on if we are on the java or on the c side of things, because we discussed 'verbatim copy of c struct... fields' apologies.
- im3w1l 5y agoIt would be possible and kind of hilarious to use a negative offset from year 2b.
- formerly_proven 5y agoThat's a verbatim copy of struct tm from C.
- throwaway4good 5y agoThe network is the computer.
- hyperpallium2 5y agowrite once, run everywhere
- throwaway4good 5y agoAhead of its time.
- ape4 5y agoThere is classes.zip with a warning not to unzip. Now it would be classes.jar
- muizelaar 5y agoAn even earlier release is here: https://github.com/Marcono1234/HotJava-1.0-alpha/tree/master/hj-alpha2 https://github.com/Marcono1234/HotJava-1.0-alpha/tree/master...
- wanyehood 5y agothank God for dr Moses Buba for helping me with pills for penis enlargement and cure my friends diabetes, he has been putting smile on my face, and on the faces of my loved ones, I got his email address via facebook platform on a penis size forum on facebook so I decided to contact him directly on his email address, and my encounter with this herbal doctor is a lifetime mind blowing testimony, so to all the other men out there about little penis , and other people that are sick of all other deadly diseases such as kidney problems, diabetes, leukemia, herpes and those that needs pills or creams for erectile dysfunction, premature ejaculation, kindly contact him directly on his email address via: buba.herbalmiraclemedicine@gmail.com or WhatsApp him on +2349060529305 or call me for more details +15019914802 He is the best herbal doctor I have ever came across during my search for a cure, Good luck to all the sick people out there, I love you all
- doggodaddo78 5y agoBefore Swing. Also, I wrote a themeable, JNI-using installer that ran a JRE from a CD-R. It was slow to load at first but it seemed impressive to users.
- twic 5y agoIt really was nice and simple back then! I always chuckle when i come across this class, which has been there since the beginning, and does absolutely nothing: https://github.com/ufuu/JDK10/blob/main/src/src/java/lang/Compiler.java https://github.com/ufuu/JDK10/blob/main/src/src/java/lang/Co...
- tom_mellior 5y agoWhat do you mean by "does absolutely nothing"? It does something, namely load a dynamic library that presumably implements its methods. Now maybe that library has never done anything, but that's impossible to tell from the code you linked.
- twic 5y agoI mean that the native methods it ultimately calls do nothing, and never have. The early versions of the JVM didn't include a compiler, they were purely interpreting, so those calls had to be no-ops. Later versions included a JIT, but the decision of which classes and methods to compile was made by the JVM, and again, those calls were no-ops. As far as i know, there was never a JVM from Sun / Oracle where those methods did anything. It's possible that IBM's or some of the other JVMs did something with those calls. But in general, having user code be involved in the decision of which methods to JIT is the wrong approach. I vaguely remember that in the 1.0 era, the plan was that JIT compilers would be third-party plug-ins to the Sun JVM. So you'd buy a compiler from, say, Borland, install it into your JVM installation, and then when java.lang.Compiler was used, it would load your shiny new Borland compiler, which would somehow magically interact with the JVM to compile bytecode. I never heard of this happening. There wasn't a published JVM API for the compiler to talk to, so it would have required a lot of close cooperation between Sun and the compiler vendor.
- deleted 5y ago[deleted]
- eplanit 5y agoI remember being very excited when this came out. What impressed me right off was the java.net package -- back then, few language environments (except in Unix-land) had built-in networking support. That was usually a (kludgy) add-on package. That, along with Threads made Java really stand out as the language for the era of distributed computing. Applets were a great idea that unfortunately didn't pan out. It still has a lot of good qualities, but is one of my least favorite languages to use (much more into Go now).
- im3w1l 5y agoApplets may be dead now, but they did deliver a lot of value during their lifetime. That's a success in my book.
- anthony88 5y agoI guess that all the Java programs that might be consider as slow back then may be running pretty fast right now.
- neilv 5y agoI remember this. Java was exciting back then. They did numerous things that were either new or that no one outside of fringe/research was using. The AWT GUI toolkit was very minimal, but I was able to develop nice desktop apps by writing my own widgets.
- TazeTSchnitzel 5y agoThe String class was much simpler back then! https://github.com/ufuu/Java-JDK10/blob/main/src/src/java/lang/String.java https://github.com/ufuu/Java-JDK10/blob/main/src/src/java/la...