42 comments

  • n9 20 days ago
    The first major piece of code that I ever wrote was a publishing workflow management system for a major newspaper. It routed page images to presses and generated pdfs of each page in each edition of the newspaper and made pdfs of each day's newspaper editions and published them to a static website where they were archived.

    I was only allowed to use perl 4 to write this software and I wasn't allowed to use a database, even though the datastructure for a day's publishing batch had tens of thousands of keys and values and required RDBMs style queries. It also features a configurable postscript parser that extracts all kinds of data from completed newspaper pages that informs the publishing system. When I wrote it I was told that it would run for a few months only while we figured out how to get a $5M commercial product to handle the work.

    The whole thing was written in perl 4 style OO Perl and came in at about 16k lines of code in the end -- most of the code was for the postscript processor and tons of cruft that I had to write to made a relational DBMS in memory because I wasn't allowed to use mysql. It took me four months to write it. I launched it in January of 2002 and it runs to this day. I know this because I got a call about it last month where my replacement's replacement's replacement asked me a few questions about what OO Perl is because he wanted to make a few changes. Good luck! It still runs and is responsbile for about 80% of what it was originally built to do. It is used by hundreds of people daily, who by all reports absolutely hate it. There are people working at the newspaper today that use it regularly that were not born when I wrote it. I am twice as old as I was when I wrote it.

    They have apparently tried to replace it several times over the last 22 years and have failed to do so... this is likely due to the blockheadedness of my old boss (who is still there) as much as the radically insane obscurity of my code, which is exactly how you'd expect 16k lines of 22 year old OO Perl 4 would be.

    • jbverschoor 20 days ago
      Interestingly, i have a similar story.

      I created a database publishing platform exactly that time, a was given full control. I created it in Java, and added a JavaScript engine for scripting templates. The initial product was also side in a few months. It also runs to this day. The war file could be run by any Java server. The code, while old, was in a reasonable state, given some of the migrations.

      I never thought about the code being older than the people working on it

      • chii 19 days ago
        There's nothing more permanent than a temporary fix put in while waiting for a permanent fix for a problem.
        • stavros 19 days ago
          We have a saying for that in Greek: Ουδέν μονιμότερον του προσωρινού

          "Nothing more permanent than the temporary"

          • lb1lf 18 days ago
            In Norwegian we have the (made up, but widespread) word 'Permasorisk' (a mangling of permanent and provisorisk) to describe a solution which is by no means meant to be permanent, but solves the original problem well enough that there no longer is a need for the permanent solution...
        • jbverschoor 19 days ago
          It was never a temporary 'fix'. The product eventually spun off into a new company and was recently acquired by a PE firm.

          But yeah, creating software - or any kind of process actually - results in maintenance. If something is used a lot -> too many people depend on it. If the number of consumers/users isn't documented -> you don't know if you can turn it off, but for this problem you can inspect a year's worth of log files :)

      • Rebelgecko 19 days ago
        I had a job once trying to help the government un-fuck a janky codebase that they were in the process of paying billions of dollars for. I remember opening a file that had some issues (IIRC it could only be compiled with a specific discontinued compiler) and seeing a comment that the file was created on my literal birthday. Was quite the surprise.
    • bionsystem 19 days ago
      Great story ! I'm proudly responsible for a small perl script that pre-processes SWIFT messages before sending them in a back-office banking Java app. It's barely 10 yo but I'm not a dev, and I suspect it will probably run forever.

      The idea is to split messages in chunks and sort the rows by ISIN instead of having one big file without any sorting pattern, and it cuts the processing by the app from a few hours to 10 min. Never heard of a bug in this one but it's only like 300 lines of code.

    • shawn_w 19 days ago
      Perl /4/ in 2002? When I learned perl in like 1995, 5 had been out for a bit already and it was hard to find a system with 4 installed...

      (perl 4 didn't have built in support for OO; did you roll your own system?)

      • worthless-trash 19 days ago
        To be fair it is perl, there was probably a library for it.
        • mhd 19 days ago
          For Perl4? Not that likely, IIRC CPAN was started in '95, after Perl 5 came out which introduced most of the packaging semantics. I think Perl 4 basically had an "include" equivalent.

          Don't remember anyone doing OO back then with it, either. Would be interested to know how that worked...

    • justusthane 20 days ago
      That’s a really incredible story. I’m not sure how much more you remember/are able to share, but I would kill to read a longer post about this.
      • Folcon 20 days ago
        It's in moments like this that I miss the hacker news magazine[0], because I had relatively high certainty that when stories like this popped up, the poster in question would get interviewed and their story would appear in the next edition.

        Not sure who else recalls it? Really appreciated the monthly format as well, I think summarising the last month and going in-depth on specific stories ended up being a good touchstone for what happened in the community.

        If anyone is interested in picking up the torch, I for one would be happy to resubscribe to it :)...

        -[0]: https://news.ycombinator.com/item?id=1261499

    • chefandy 20 days ago
      > asked me a few questions about what OO Perl is because he wanted to make a few changes

      Well that's pretty impressive. Most of my garbage pearl code from 20 years ago would probably look like line noise to most modern developers if it wasn't for the shebang.

      • genewitch 20 days ago
        i never wrote perl in any serious fashion, but i've always tried to use as much information in the source so i can figure out how i did it. I enjoy reading the submissions to code golf challenges, though. A few of the more esoteric language users have let slip they write a compiler to go from readable code to the target unreadable code.

        Whenever i see terse C or load bearing perl it does look like line noise.

    • wh33zle 20 days ago
      If you don't mind me asking, how much did they pay you to build it?
      • jbverschoor 20 days ago
        My salary was about 30k. Best deal ever lol
        • GrumpyNl 19 days ago
          With software still running and being used, the company had a bargain.
          • glitchcrab 19 days ago
            The person you're replying to is not the GP
        • jbverschoor 19 days ago
          Per year for those who are confused..
    • davorg 19 days ago
      > The whole thing was written in perl 4 style OO Perl

      What does that mean? Perl's basic OO support (using blessed hash references) was introduced with Perl 5 in 1994. I have no idea how anyone would even attempt writing OO code in Perl 4.

      • Almondsetat 19 days ago
        It says perl 4 style OO Perl, not perl 4 OO style Perl
        • shawn_w 19 days ago
          He said he was using perl 4. And there was no such thing as "perl 4 style OO".

          I'm thinking he's just misremembering what version of perl he was using. Easy to do after 20+ years.

          • Almondsetat 19 days ago
            I can write C style C++ or html 4 style html 5
    • hohlraum 19 days ago
      I architected/managed/maintained a perl web application starting in 2001 for a dot com. I still work with it today and the application/company recently sold to a new company for $24M USD.
    • defaultcompany 18 days ago
      > It is used by hundreds of people daily, who by all reports absolutely hate it.

      This made me chuckle because as a software development intern in 1988 (being paid like $8 an hour) I wrote a giant monstrosity of a time tracking program for a local CAD company in an Empress database using its forms builder interface. It was in use for far longer than anyone ever intended and whenever I ran into someone from that company years later they would tell me how bad it was. Sorry guys!

    • ssl-3 19 days ago
      How does it feel to be 44, fellow old person?
    • xeyownt 19 days ago
      Ah ah Perl, the king of all WORN languages: Write Once, Read Never. Because It is so powerful that you get burned if you come too close.
    • s2l 20 days ago
      [flagged]
      • scubbo 19 days ago
        Do your testing on your own - don't pollute the discussion with it.
  • aabhay 20 days ago
    The wayback machine is pure nostalgia. Every time I go there I’m truly amazed at what it’s like to have a society wide memory that automatically captures these different moments of our lives.

    Old pictures I never thought I’d ever see again. Landing pages for old companies I’ve built and only a handful of my closest friends remember. Blog posts from long deleted places, times, and mental caverns.

    Just incredible.

    • otteromkram 20 days ago
      I try donating every few months. Maybe $5-$10 each time.

      Like yourself, I think it's an incredible resource and don't mind pitching in( when I can) to help keep it running.

    • Scoundreller 19 days ago
      Reminds me of some reddit post with a link to some page with some local history, but all of the image links were broken. Within a few minutes I posted the link to Wayback and they were delighted because they happened to be archived there.
    • eggdaft 19 days ago
      Well you got me excited to check out my first homepage but I guess I predate the WM. When did it start archiving?
  • khiner 21 days ago
    One of the first programs I ever wrote - a program to find valid English crossword fills given a grid pattern with optional partial completions.

    This project came to mind recently and I looked around on the Wayback Machine. Turns out I posted the jar on MediaFire and linked to it on an old blog on Jan 2, 2011. Luckily, there was [_one capture_ of the jar on MediaFire](https://web.archive.org/web/20240123154949/https://download1...) from oddly recently (Jan 23 2024). I downloaded and opened it on my 2023 MacBook Air, and it ran! Since it's Java, I'm guessing it runs on other computers, too :)

    It was a delight to find it still working. Anyone else ever find an old program you thought you lost and get it running again?

    • khiner 19 days ago
      EDIT: As a couple observant folks pointed out, the original MediaFire link actually still works, so WB machine saved the day by making it possible to find the link, but the jar was also still hosted on the today-internet :)
    • theanonymousone 19 days ago
      Nice job. Now maybe you can make it a web application using CheerpJ.
  • xandrius 19 days ago
    Not to be snarky but 2011 is yesterday for programming, no major shift. I'd imagine almost all code written there would be able to run today.
    • koito17 19 days ago
      In the Java world, sure. Other programming language ecosystems tend to have tons of churn. For an anecdote, every TypeScript project I find from 2021 or earlier is simply impossible to build nowadays, meanwhile the ClojureScript code I dealt with in a previous job was able to survive 8 years worth of updates to libraries and the core language. I frequently ran into code that was last modified around 2013 because it just worked and didn't need any refactoring. (For reference, ClojureScript didn't have a public release until 2011)

      For another anecdote, every Golang repository I've found that predates v2 modules is nearly impossible to build, especially if it contains dependencies that link straight to Google Code instead of GitHub. (As an exercise, try building the first public releases of etcd, prometheus, etc. They were super simple projects compared to what they are today, but you will have a tough time building them)

      Java and most JVM languages are the rare exception IMO (unless the project uses Gradle). That's one of many reasons why I love working with the Java platform :)

      • lloydatkinson 19 days ago
        > every TypeScript project I find from 2021 or earlier is simply impossible to build nowadays,

        This is the fault of all the bullshit tools that were never any good to begin with (Webpack, Babel, etc) and the Node ecosystem generally causing pain. If you had a package-lock.json you should (in theory) be able to install all of those and it should work. Of course, this relies on dependencies of dependencies actually following semantic versioning but I'm fairly sure many packages on npmjs.org do not follow semantic versioning.

        Worst case scenario, you can take your TS files and put them in a newly created project. Preferably the project has a minimal number of build tools, eg, 1. Such as Vite, for example. This effectively replaces easily 5 or 6 major load bearing dependencies that used to be necessary.

        Even better: Just use Deno, where it doesn't need any of this to build and run TS files!

        • gear54rus 19 days ago
          How does lock file rely on semantic versioning? It specifies dependencies (and their dependencies) explicitly together with their exact hash

          not sure how one can have a problem running something if it installs all the same dependencies and using the same scripts

      • deepsun 19 days ago
        True story, that's why I moved back to Maven (pom.xml) from Gradle.

        As a bonus -- IDEs seem to work faster with Maven, I assume because parsing declarative pom.xml is faster than parsing and running imperative build.gradle.

        • ecshafer 19 days ago
          Maven is better than Gradle, full stop. The only real issues with Maven, are the they keep adding features and are bringing in more scripting capabilities. Call me old, but a build system should be purely declarative as a matter of principle. Scripting just leads to someone eventually getting the idea of doing something clever, and then it becomes hell afterwards.
          • pjmlp 19 days ago
            To put it more bluntly, Gradle only matters because of Android.
      • fsloth 19 days ago
        The snarky response would be that TypeScript and Go are not industrial strength languages :)

        C++, C, even Fortran run just fine after decades.

      • cqqxo4zV46cp 19 days ago
        The JS ecosystem’s churn is unusually bad. I wouldn’t use that as a representative example.
      • sumtechguy 19 days ago
        Tell me about it... I recently just had the fun of playing with an angular 8 project and thats 'only' 2019. Luckily in that case it was just turning on flags for node to act in an older deprecated way.

        For my older projects as long as I could get the right visual studio to install and run (VMs will fix any OS compat issues) I could compile the things out of the box. As we did not go external unless we absolutely had to. These newer central repository projects are not going to end well.

      • cryptos 19 days ago
        What you say about Gradle's instability over a long time is so true. Even code snippets from 3 to 5 five years ago seldom work without some (more or less random) adjustments.
        • twic 19 days ago
          It's been standard practice for a very long time to use the Gradle wrapper, which fixes the Gradle version, so there really shouldn't be a problem building an old project.

          Making changes to one is indeed fraught.

          • cryptos 19 days ago
            You're right that including the Gradle wrapper is a common good practice for years. But if you have to or want to move to a newer Gradle version than you can enjoy the full randomness of the domain specific language from Gradle itself and from a thousand plug-ins.
            • brabel 19 days ago
              Exactly, if you have a very old Gradle project, it's best to use the wrapper to keep running with the version of Gradle it was written for, and make sure to use a compatible JDK to compile with (older Gradle versions won't work on new Java versions, which goes against most Java code which will almost certainly run forever even if written for Java 1.1).
      • bigstrat2003 19 days ago
        Note that what OP said he found was a JAR, not code. If you found an executable built in any language, I would expect it to still be able to run 13 years later.
        • deepsun 18 days ago
          JAR is not executable, it's a zip-archived bytecode (basically the same code with better readability for machines, very easy to decompile back to sources, you usually only lose comments and whitespaces). Java is an interpreted language, not compiled, at least mainstream VMs.
      • kelnos 19 days ago
        > In the Java world, sure.

        While 2011 Java certainly still runs today, 2011 Java is Java 6, which probably looks quite a bit different than the Java you'd write today. Not "different language" different, but different enough, especially with lambdas, and if you're doing anything with multithreading, or like to use functional-style streams APIs.

        (I remember when generics came out in Java 5... now that did make it look a bit like a different language.)

      • geodel 19 days ago
        > For another anecdote, every Golang repository I've found that predates v2 modules is nearly impossible to build, especially if it contains dependencies that link straight to Google Code instead of GitHub

        Sorry, but github repo listed above is compiled Java program in jar format. JVM is doing the heavy lifting here. For golang you are talking about building the program. The equivalent of it would running exe or binary format and that definitely would work unless OS/Arch version itself disappeared.

        There is ton of churn in Java ecosystem package moving from javax -> jakarta namespace, new date / time/ file libs, build tool, class file format and so on. What could most likely work is standalone jar file running in older and newer JVMs.

    • swiftcoder 19 days ago
      One would hope so, but in a variety of popular environments that is not the case. Apple is particularly challenging in this regard - keep in mind, PowerPC macs were still actively supported in 2011. Since then we've sunset PowerPC support, sunset 32-bit support, and I imagine we're only a couple of years short of sunsetting Intel support as well

      I recently spent upwards of 4 hours trying to get a 2009 python project to run, and the graphical portion is still subtly broken on MacOS...

    • CJefferson 19 days ago
      This is probably the worst case, but I wrote an iPhone game back around then. I recently tried to build it and after a couple of days of not even getting close to something which built (never mind worked when running), I gave up.
    • fragmede 19 days ago
      You've had a very different experience of the past 13 years if you've experienced no major shifts. Even the past year has had a whole big change with the advent of LLMs, nevermind the rise of the web, VSCode, typescript, rust, and more.

      In 2011, Java was on version 7. We're on 22 now in 2024. There have been some paradigm shifts in Java during that time. Streams (Java 8), Lambda expressions (Java 9), the var keyword (Java 10), Records (Java 14), switch and yield (Java 12/14), instanceof (Java 16). Functional programming over OOP; Cloud and microservices, emphasis on security, DevX, concurrency.

      Code written in 2011 still runs, but the world's changed around it.

      • The_Colonel 19 days ago
        > In 2011, Java was on version 7. We're on 22 now in 2024.

        In the IDE technology, the jump was even larger. In 2011, I was using Intellij 10, now I'm on version 2024.

        > There have been some paradigm shifts in Java during that time. Streams (Java 8), Lambda expressions (Java 9), the var keyword (Java 10), Records (Java 14), switch and yield (Java 12/14), instanceof (Java 16).

        The only listed Java feature which represented a paradigm shift was lambda expressions (which were released in v8, not v9), the rest are minor features.

        • twic 19 days ago
          Streams had a pretty huge impact on how a lot of people write code.

          Also, lambdas came in in 8, not 9. Streams without lambdas would have been pretty painful!

          • layer8 19 days ago
            There were streams-like libraries before Java 8. It’s lambdas that made them more practical.
      • squigz 19 days ago
        The rise of the web? In the past 13 years? Gosh does that make me feel old...
        • bluenose69 19 days ago
          I imagine some of us reading this learned to program before bitnet was a thing. Punched cards. Paper tape. Booting by entering a lot of binary numbers with toggle switches. Good times. Oh, and that ancient Fortran code? It still works and, if you can see patterns in arithmetic-if blocks, it still expresses clever algorithms elegantly.
        • fragmede 19 days ago
          Shit, I learned to program before there was Google.
          • brabel 19 days ago
            Reminds of a random comment or tweet I read somewhere where the person said their young children just couldn't believe she was so old that she was born before Google existed :D they just couldn't believe her :D so cute.
          • xandrius 19 days ago
            I studied OpenGL when all I could find was literally 1 tutorial on it and it was not in my native language.
      • xandrius 19 days ago
        What a world we must have lived in without VSCode, TS and rust, a truly undistinguishable one it seems.
      • ecshafer 19 days ago
        concurrency is on your list why? DL added concurrency to Java long before 2011.
        • 62951413 19 days ago
          I remember using j.u.c in production back when it was still concurrent.jar. There were surprisingly many jobs in NYC/London circa 2006 if you had Core Java skills.
  • squigz 19 days ago
    The Internet Archive is (IMO) one of the most important endeavours of our time.

    Consider donating: https://archive.org/donate

    • mdaniel 19 days ago
      I normally echo this sentiment, and I can easily imagine an outcome through which the money could pay for lawyers, but in the ongoing discussion about their court case <https://news.ycombinator.com/item?id=40201053> there was a comment that predicts any money they get is just going to end up in the pockets of Hachette when they eventually lose :-(

      I recognize this is a very pessimistic take but ... for consideration

  • noufalibrahim 19 days ago
    My earliest "large" program which I can remember was a drawing program I wrote in GW BASIC. You could draw figures, change brushes, I think it had a crude filling function and a few other things. In my innocence, I backed it up onto 5.25" floppy disks, labelled them neatly and put them in a box. This was in the late 1980s.

    Fast forward to 2024, I still have the disks but no drive to read them. On the other hand, the notebooks where I wrote out some of the routines for the programs are still with me and I can read them. Says a lot about "digital archiving".

    • mdorazio 19 days ago
      FYI if you want to get things off a 5.25 floppy, you can get a Greaseweazle for $25 and use it with any 5.25 drive. https://decromancer.ca/greaseweazle/
    • darkstar_16 19 days ago
      Are you me ? I wrote an exact program like this in GW Basic back in the day. I remember adding the ability to draw coloured lines but I had no way to verify since my computer monitor was one of those with green coloured pixels. Finally got to see everything in full colour at my school lab and was so thrilled. Those were the days ...
      • noufalibrahim 19 days ago
        Nice. I had a 256 colour VGA monitor so... :D
    • Almondsetat 19 days ago
      >Says a lot about "digital archiving"

      It doesn't, since you could easily buy a USB floppy disk reader

      • noufalibrahim 19 days ago
        I haven't looked recently but I did search a while ago for a 5.25" USB floppy drive but never found any. Several 3.5" though.

        Also, I haven't done any specific climate control for the books or the disks. The notebooks are still readable and I can even tell the difference in the parts I wrote with a ball pen and a fountain pen. Many of the disks are damaged with fungal growth on the magnetic medium and I doubt I'd be able to read them even with a drive.

        It's quite challenging to read off an old disk. Jason Scott (the famous digital archivist) had a nice talk on recovering the original source code for Jordan Mechner's Prince of Persia from ancient disks that mentions some of the challenges. https://www.youtube.com/watch?v=FnEWBtCnFs8

      • Narishma 19 days ago
        You don't have to buy anything to read the notebook though.
        • Almondsetat 19 days ago
          After 30 years you might need a new pair of glasses
  • bandrami 20 days ago
    One of my first jobs was writing a Perl script in 1996 that did an incredibly mundane set of checks on some routers in a datacenter (using this really cool new technology "BGP") and offered essentially a public REST API (though we didn't call it that back then) you could periodically poll to see their status. Every so often I check to see if it's still there, and it always has been. I really hope it makes it to 30 years.
  • brabel 19 days ago
    You can download the old Java build system, Apache Ant, from 2003 and it still runs without issue:

    https://archive.apache.org/dist/ant/binaries/

    Download the bin.zip distribution, unzip it, then run this comand:

        java -cp "lib/*" org.apache.tools.ant.Main 
    
    It runs on Java 21 without issues :D.

    Java is like Windows: it can run stuff written for it forever.

  • jraph 20 days ago
    If you are so inclined, a decompiler might be able to "recreate" a big part of the source code. IntelliJ IDEA's one (Fernflower) works well, its fork Vineflower seems like an interesting option too. Both are released under Apache 2.

    Fernflower works so well I don't always immediately notice I'm debugging decompiled code.

    • rafaelgoncalves 19 days ago
      Nice, didn't know about fernflower, thanks for the recommendation! I use JavaDecompile (JD-GUI)¹ too much and is already in my workflow, but from insights like this i see some nicer/better tools.

      1 - JD-GUI - https://java-decompiler.github.io/

      • jraph 19 days ago
        Seems convenient, I'll keep this in mind for whenever I may need this.
  • DrBazza 19 days ago
    One of my first pieces of code from my first job in 1997 still exists and runs according to a long suffering colleague that still works at the same place. That also means the code has gone from SCCS -> CVS -> Clearcase -> Perforce -> SVN -> Git. That's enterprise development for you.
  • gedy 20 days ago
    Mine was from 1984, I recovered basic program from a Commodore 64 disk using a USB to 1541 controller. A character sheet creator for a "homicidal maniacs" role playing game my school friends and I created :-).
  • linker3000 19 days ago
    I found some old Turbo Pascal code I wrote in the late 1980s - early 1990s and managed to compile and run it under a DOS emulator a few years back.

    The code is a map editor for the Rockford ('Boulderdash') PC game. Unfortunately, the versions of Rockford in the wild, for download and online play, seem to be based on a later game engine and the map format has changed so the editor no longer works.

    The code was designed to produce registered and un-registered versions, but I never released it into the wild.

    If anyone has a copy of the original Rockford game version I'd love to know about it.

    https://github.com/linker3000/Historic-code-PC-Pascal-and-AS...

  • dolmen 19 days ago
    I found mine too, archived in 2001, but my browser can't run Java applets anymore.

    https://web.archive.org/web/20010407081008/http://www.multim...

    In fact I noticed 10 years after the publishing when I tried to run the applet that it didn't even run because the compiler of that time had generated invalid byte code (not caught by the JVM) or that the source code itself was invalid and that had not been caught by the compiler. "Compile Once, Run Everywhere", they said.

    • brabel 19 days ago
      If you want to run your applet today, try CherpJ: https://cheerpj.com/

      This should be able to run absolutely any Java in the browser.

  • Takennickname 19 days ago
    What a strong ad for Java
    • vbezhenar 19 days ago
      2011 for Java is nothing. I've used JDBC driver written for Java 1.4 (2002) in Java 17 and I absolutely sure that it'll work with Java 21 just as well.

      Java backwards compatibility is real and it works absolutely fine unless you do bad things.

      • robertlagrant 19 days ago
        I think the last breaking change I remember was enumerations being added, which broke any code that used the class name as a variable name. But I could be wrong; it was almost 20 years ago.
        • matsemann 19 days ago
          With Java 11 they hid a lot of internal functions that people had used in their code, so breaking things. But that was never really part of the public API, so strictly not a breaking change.

          I remember moving to Java8 changed the iteration order of hashmaps etc, which also broke some stuff for us. But again, that was mostly our fault for relying on unspecified behavior.

          • brabel 19 days ago
            With Java 11 they only hid it, you just need to pass some parameters to get it working. When it truly broke, I believe, was only on Java 21, which finally removed some clutches people had been using to work around the new limitations.
        • v-erne 19 days ago
          Maybe not a part of language per se but they throw out corba in java 11 and this decimated some very old libraries that used is as dependency.
        • Starlevel004 19 days ago
          Thread#stop no longer works as of at least Java 21.
          • brabel 19 days ago
            True, I think since Java 17 they have been removing really obsolete stuff.. I think that's when they removed CORBA from the JDK as well (though you can still get it as a library I believe). Same with Nashorn (the JS runtime).
      • xxs 19 days ago
        Personally I consider 1.4.2 the point where java got stable, and had a true IO (java.nio), along with a decent JIT (hotspot)
        • _the_inflator 19 days ago
          Phew, that was around the internet Java applets phase, if I recall it correctly?
          • xxs 19 days ago
            That much it was all about JSP/XML and stuff; J2EE too. JDO came soon after too. The applets did exist and (javax.)swing was a thing - but it was far from the focus... and of course Java was still considered slow.
    • dehrmann 19 days ago
      Java's maintained almost perfect backward compatibility. If you want code you wrote today to run in 10 more years, Java is probably the best choice. Most other languages have too much of a history of breaking changes, or if you pick C/C++, you'll have issues linking against an old UI library.
      • worthless-trash 19 days ago
        There are many other languages with a better lindy effect rating ( https://en.wikipedia.org/wiki/Lindy_effect), common lisp, erlang, fortran and more.

        I won't doubt how java doing well, but other languages have it beat.

        • EdwardDiego 19 days ago
          Except they're not in widespread usage, so aren't relevant.

          No grads are going "gee, do I go with a .NET shop, a JVM shop, or a BEAM shop?"

          And as for Common Lisp, which implementation? They can't even be compatible amongst themselves, so I'm dubious that SBCL CL from 13 years ago would just work.

          • worthless-trash 15 days ago
            > And as for Common Lisp, which implementation? They can't even be compatible > amongst themselves, so I'm dubious that SBCL CL from 13 years ago would just > work.

            For a bit more solid example:

            https://web.archive.org/web/20150217111426/http://www.inform...

            This too will likely end up being downvoted for talking against the hivemind here.

          • worthless-trash 19 days ago
            > Except they're not in widespread usage, so aren't relevant.

            I don't know any java programmers either. Apparently people use java, I just dont know any that do it willingly. I'm sure they -must- use it, but erlang/fortran/etc as mythical to you as java is to me.

            > No grads are going "gee, do I go with a .NET shop, a JVM shop, or a BEAM shop?"

            Fresh grads don't know better, they take whatever pays. Businesses choose the cheapest (not the best) option and grads don't have the experience to choose better. Grads choices are not a measure of quality or desirability.

            > And as for Common Lisp, which implementation? They can't even be compatible

            > amongst themselves, so I'm dubious that SBCL CL from 13 years ago would just

            > work.

            My SBCL from 2010ish works, I've patched it up and improved it over time, but I haven't tried to run the original, it probably does. Its been through svn to git so I've lost the history, all of this is as anecdotal as anything else. Previous lisp code that I wrote was trivial and ran out of the box on SBCL, however the code is very self contained and not 'networked' or 'modern'.

            My erlang code however has been running in a cluster since the early 2000's, it has also been through several releases for additional features, however I no longer have access to that code so I can't validate what has been done to it for the last decade.

            I like your arguments, I just dont think we're coming from the same historical viewpoint.

        • stavros 19 days ago
          The Lindy effect assumes you have no other information about the thing you're estimating. Obviously if I know the thing is on its deathbed, I can't invoke the Lindy effect. Similarly, a hundred-year-old language one person uses any more isn't likely to last another hundred years.

          Given the relative sizes, I wouldn't bet on Common Lisp outlasting Java just because it's older.

          • worthless-trash 19 days ago
            Its likely we will both be dead before either of them are no longer being maintained.
        • lmm 19 days ago
          Yeah have you tried actually running a common lisp program from decades ago on a different implementation from the one it was developed on?
        • dehrmann 19 days ago
          > common lisp, erlang, fortran

          That's a pretty esoteric list. Javascript would have been a better choice because of widespread deployment by multiple vendors and heavy legacy.

          • worthless-trash 19 days ago
            Javascript is still pretty young (comparatively) however I do believe you'd be right in saying that its likely to be around for a very long time.
            • itronitron 19 days ago
              Interestingly, Javascript is just as old as Java, and Python is older.
              • worthless-trash 19 days ago
                Python kinda dies each major release though, there is no backwards compatability goals.
    • palad1n 19 days ago
      Seriously. Remember applets? My first real Java app was a small 3D Pong game using AWT, and it still works using appletviewer on my M1 MacBook Pro. I mean, it's circa 1998.
      • twic 19 days ago
        I found an old applet of mine from the late '90s, and tried running it. Crashed with a NullPointerException from deep inside AWT. My guess is that there is now some setup that needs to be done that didn't at the time.
    • _ZeD_ 19 days ago
      that should be the norm.

      the reality is that is a strong ad against almost all modern frameworks, that may live for as little as a football season

      • cqqxo4zV46cp 19 days ago
        Not really. Not automatically, anyway. Realistically, code lasting forever is, the majority of the time, some engineer’s nerdy wet dream almost completely devoid from any real-world requirements. “This code should last 20 years” should, for most people, be fairly low on the list of desires for a technology stack. In the vast majority of cases, the processes that the software seeks to automate will have been thrown out LONG before then. The business went bust and the only surviving copy is on some developer’s personal computer. Darlene from accounting left and her replacement likes to do things differently, so all this custom stuff was replaced with something off-the-shelf. Your $40B unicorn dating network very unceremoniously fell from the charts after Gen Z decided to throw their phones away and connect in person like we used to. After all that, you’re left there holding a perfectly functional(?) solution to a problem nobody is asking to be solved anymore.

        Let’s be clear: I know that banks run on COBOL. Everyone knows that. Please don’t say it. I can name 5-10 other industries off the top of my head where this sort of longevity matters. But let’s not kid ourselves that the stuff we’re writing is even intended to last a long time.

        • v-erne 19 days ago
          >> But let’s not kid ourselves that the stuff we’re writing is even intended to last a long time.

          Not my experience at all. I am literally at this moment releasing new version of private app framework that was created by few people (including me) about 18 year ago for few clients on long forgotten platform because some client (who is still paying support fees!) found some obscure bug building new application using this framework. The previous version was released about 8 years ago.

        • The_Colonel 19 days ago
          Longevity is very important in enterprise apps. Companies are full of small services / utilities which were developed many years ago, work for the most part just fine and need to be touched only rarely to fix a bug which just started manifesting, add a small feature or enable some integration.
        • vitro 19 days ago
          >>“This code should last 20 years” should, for most people, be fairly low on the list of desires for a technology stack.

          >> But let’s not kid ourselves that the stuff we’re writing is even intended to last a long time.

          Well, it depends. If you write custom software for enterprises, they very much see it as a long term investment. Software grows with the company and is embedded in it. Nobody wants to pay for complete rewrites every five years..

    • xxs 19 days ago
      stuff written for java 0.9 (1996), even with the default package (no namespaces), still runs normally. 2011 is past java 7.
      • guenthert 19 days ago
        compile once -- run forever!

        Seriously though, this seems to be due to happenstance (well, commercial interest motivating great continuous engineering effort), rather than by design (forward-thinking) though; unlike, say, IBM's Technology Independent Machine Interface of AS/400.

        • xxs 18 days ago
          bit late on "by design" party - java 'binary' (not source, which is easier) compatibility is an exceptionally important feature. E.g. changing method signature like void x(int val) to void x(long val) does break the binary compatibility and it means the original method has to be preserved, potentially as something like void x(int val){x((long) val);} - which just calls the new method by casting val. It some cases the original method might be marked as deprecated.

          There are countless examples of such a behavior.

        • davidalayachew 19 days ago
          It's ABSOLUTELY by design.

          On the Java Mailing Lists, the creators/stewards of Java are constantly fighting back so many feature requests BECAUSE those features would threaten backwards compatibility. And that mailing list has been going on for a long time now. You can see feature requests (and their subsequent rejections) going as far back as the late 90's lol

        • jjav 18 days ago
          > rather than by design

          Remember, Java came from Sun. Backward compatibility was an absolute requirement at Sun for nearly everything. Compatibility is hard-baked-in to the culture.

          Oracle plays more loose, but a lot of the people are still around.

          Definitely by design.

    • contrarian1234 19 days ago
      Except now a days you're not encouraged to run a system-wide JVM!

      You can still download a JVM for Java 21, but it's from weird third parties like Adoptium

      • EdwardDiego 19 days ago
        Adoptium is a JVM from the Eclipse Foundation. They're hardly weird, even if the branding is. It's basically "people into JVMs not controlled or licenced by Oracle that work good".

        https://www.eclipse.org/membership/explore-membership/

        • pjmlp 19 days ago
          Almost correct, except the part that it is a bit like saying Red-Hat is a Linux not controlled by Linus.

          https://devclass.com/2023/03/22/despite-openjdk-70-of-java-f...

        • contrarian1234 19 days ago
          I never realized it was from Eclipse! They've cleaned up the webpage where it's a bit more clear now. I always figured it was a weird consultancy or something like Gluon - where there was a paid product when you dig a little

          Thanks for clearing it up. Hope they rebrand and drop the Adoptium name eventually

          • arjvik 19 days ago
            It used to be called AdoptOpenJDK, and was a project that essentially just provided prebuilt binaries of OpenJDK.

            But post several Oracle changes that I admittedly have not kept up with, they have grown in scope and also been forced to remove OpenJDK from their name. They went with Adoptium, to keep the Adopt part that got them famous.

      • brabel 19 days ago
        That's bullshit.

        Here are the JDK distributions supported by SDKMAN, a really good JVM-oriented package manager: https://sdkman.io/jdks

        There's a couple of dozen vendors in there , including very weird ones like IBM, Microsoft, AWS, Azul, Eclipse, SAP, Redd Hat, and even... Oracle!

  • nikolajan 20 days ago
    My first piece of code (substantive) was an ecommerce platform (frontend and backend). Complete overkill, and the startup was dead a year later, but the project itself was fun.

    Likely 15k+ lines of code, not a single unit test; simpler times :)

  • haolez 20 days ago
    On a slightly related note, old Emacs modes (elisp) run incredibly well to this day. There might be working code there that spans over 3 decades.
    • Zambyte 19 days ago
      Lisps that support macros are pretty much infinitely backwards compatible. Even across dialects. I wrote a set of macros to be able to program in a subset of Scheme and Hylang, and run that code on either :)
      • anthk 19 days ago
        One guy form the PDP-10 'tribe' wrote a Maclisp interpreter in Common Lisp with relative ease. 90% of the code would still run as is, and maybe under Elisp too...
  • tmoertel 19 days ago
    The oldest thing I've written that I can still find on the Internet — the original disks are long gone — is a microbe simulator I wrote about 35 years ago. Apparently, at least two people archived a copy:

    https://www.macintoshrepository.org/11521-microbe-swarm

    I suspect that it would run as is on a 68k Macintosh emulator.

  • guessbest 19 days ago
    I have Objective-C software for iOS that was built for iOS 3 that still runs on the latest version of iOS and people still pay for it. Strange how language stability is an achievable goal.
    • kristianp 19 days ago
      Why don't you post the app store link? That's allowed.
  • fragmede 20 days ago
    Damn, that makes me want to see if I can dig up the asm code I wrote for the TI-83 and run in on an emulator on modern hardware. Really happy for you that you were able to find that jar!
  • booleanbetrayal 19 days ago
    Wayback machine lead me to rediscover a Doom 2 level I made awhile back [1]. What a treasure of a resource!

    [1] https://www.doomworld.com/idgames/levels/doom2/p-r/rurqta

  • urbandw311er 19 days ago
    I also found mine! The first program I wrote (aged 13) was in 1991 - it was “RADBench” a program for the Commodore Amiga that created a slimmed-down workbench that lived on a RAD disk (like RAM but survived a soft reboot). Meant you could use your computer without having to reinsert the disk containing the main OS binaries whenever you wanted to do anything.

    I distributed it via public domain shareware listings - back then you had to send them off to a distributor and they would advertise their apps in the major computer magazines.

    I used to get royalty cheques in the post! Which I think I spent on sweets.

    Turns out most of the shareware from back then has been archived online so I was able to get it running again on an Amiga emulator and read all the immature embarrassing stuff that a 13 year old kid thinks belongs in a ReadMe… ;-)

  • oefrha 19 days ago
    My first "major" program was a ASCII art based Super Mario Bros clone in Turbo Pascal from 2005. I don't have it anymore, but since Turbo Pascal hasn't changed and text terminals haven't changed, I'm pretty sure it still works.
  • Brajeshwar 20 days ago
    This is cool. I went there to check if I can find some of mine and found the page that links to some of my public downloads, unfortunately, none of the Zip files were archived.

    And the Ruffle Flash Emulator still do not work with most interactive Flash Applications!

    • thaliaarchi 19 days ago
      You might try building Ruffle from source. I’ve found that online versions don’t work for the games I want, due to using an outdated version of Ruffle.
  • Suppafly 20 days ago
    My son found some of my old java code from 20 years ago and managed to get a couple of the programs to run, with some very minor modifications. The java applets not so much, because no browser has had support for applets for a decade or so.
    • palad1n 19 days ago
      Use appletviewer. I have something from 1998 which still runs using that.
      • Suppafly 19 days ago
        I'll have to check it out, we spent a few minutes looking and it seemed like they don't ship it anymore, but I guess you can still get Java 8 from Oracle and it should include it.
  • calvinmorrison 20 days ago
    Here's the oldest i could find, still hosted by sourceforge all these years later... © Calvin Morrison 2009

    https://mocicon.sourceforge.net/

  • daemin 18 days ago
    I've recently dug up some of my first "larger" scale projects that I implemented in the early 2000's, including compiled executables, which managed to run unmodified on modern Windows.

    That is an achievement in compatibility.

    It was 2 demos of my game engine project, one compiled in late 2001 and the other in 2002 based on the exe file timestamps. They used Win32 and OpenGL, and surprisingly work faster on my laptop with integrated graphics than on my beast desktop PC.

  • thrdbndndn 20 days ago
    >on the Wayback Machine

    I mean, the original MF link literally still works (I intentionally break the link in case HN filters it)[1].

    > Luckily, there was [archived] from oddly recently (Jan 23 2024)

    You can see archiving reason on WB's index page [2].

    In this case, it was archived due to "why: archiveteam, archiveteam_mediafire".

    [1] http s:// www. mediafire .com/file/rwpl49xusm55s2a/WordFillVer2.jar

    [2] https://web.archive.org/web/20240000000000*/https://download...

    • khiner 19 days ago
      Good catch! I didn’t realize the original link still worked. Also didn’t know about the “why” notes on WB index. Thanks!
      • khiner 19 days ago
        Updated to reflect this.
  • self_awareness 19 days ago
    I've found some of my old .jar's (some small games) written on Windows in the 2000's. They still run on Linux 20 years later. That's why I like the JRE.
  • INTPenis 19 days ago
    I recently realized how much data the wayback machine is archiving when I found my old webpage with dozens of videos and photos of my puppies being born and they all worked.
  • NovemberWhiskey 19 days ago
    I promise you that there are major businesses still running on Java 6 code from 2011.
    • oaiey 19 days ago
      As a dark matter architect, I can tell you: You do not need to promise. That is reality ;). You let the system run some years successfully, never touch a running system, than you fire fire-everyone involved cycle, then do something important, maybe plan the successor system and but then scrap that. And then budget is tight and the UX needs it more urgent. 2024 it is.
    • amne 19 days ago
      I don't even know what Java 6 means. Last time I wrote something in Java it said Java 1.5

        compiled Java class data, version 49.0 (Java 1.5)
      • wizzwizz4 19 days ago
        They rebranded Java 1.x as Java SE x, then later just Java x.
        • NovemberWhiskey 19 days ago
          No, it's way more confusing than that.

          They started with Java 1.0 and 1.1 - then to "Java 2" at version 1.2, so you have Java 2 version 1.2 ... they then stuck with that through the version after 1.4 - but rather than 1.5, that was special as it was Java 2 version 5.0 ... thereafter they're just numbered with the plain number.

          • wizzwizz4 19 days ago
            So that's where the 2 in J2ME comes from!
          • hbn 19 days ago
            > thereafter they're just numbered with the plain number.

                $ java -version
                java version "1.8.0_391"
                Java(TM) SE Runtime Environment (build 1.8.0_391-b13)
                Java HotSpot(TM) 64-Bit Server VM (build 25.391-b13, mixed mode)
            
            ¯\_(ツ)_/¯
            • NovemberWhiskey 19 days ago
              Oh, that's the JRE software version - that's completely different from the language version.

              For the JRE, I want to say that they stuck with the 1.version.minor numbering (although the last version with a minor other zero was I think the Very Popular And Probably Still In Prod 1.4.2), with updates suffixed with "u" + number through the Java 8 series, but then with 9 they switched to version.minor.update instead.

              It's completely incomprehensible; not even Oracle can keep it straight.

  • winternewt 19 days ago
    The first Java code I wrote was in 1996 (IIRC) and it is still out there, but it doesn't work anymore because it is a Java applet.
    • matja 19 days ago
      Most Linux distros still package jdk8-openjdk which has appletviewer.
  • jdeisenberg 19 days ago
    Plain old JavaScript (without frameworks) holds up rather well. My simplified blackjack game from 1998 (modified in 2003) and a calendar program from 2001 (probably written before then) still work in a modern browser.

    The calendar program uses document.write(), which is very embarrassing nowadays, but then again, that was what people did back in 2001.

  • lnxg33k1 20 days ago
    My first program was a mIRC script :D
    • anthk 19 days ago
      Well, I've seen the opposite: an awk script to connect to IRC...
      • cqqxo4zV46cp 19 days ago
        One of my first programs was the sensible center: an IRC bot written in Perl.
  • amouat 19 days ago
    I wrote a similar program once. To get it to be efficient I had to use a bunch of heuristics including scrabble scoring words, so it would prefer words with low scrabble scores which were more likely to fit in with other words.
  • fsloth 19 days ago
    So I’ve turned into an old man screaming at the sky. 2011 is not that long ago! Lot’s of production code from that time can be still considered fairly ”fresh”.
  • Repulsion9513 19 days ago
    > Luckily, there was one capture of the jar on MediaFire from oddly recently (Jan 23 2024).

    Why is that lucky? The MediaFire link is still live anyway.

    • khiner 19 days ago
      Someone else pointed this out as well - I didn't realize the original MediaFire link still worked. Updated to reflect.
  • smusamashah 19 days ago
    To author, if you use IntelliJ, you can very easily get the source back by dragging/opening compiled .class files in IntelliJ
  • sandos 19 days ago
    Wow, I did some work in summer 1996 in java, web applets! Would be awesome to find that again, but I think the chances are less than slim for that happening.

    Actually I did some somewhat impressive graphical x86 assembly programs around 1994-95 which I would have really liked to see today, but I saw no value in those once I had done them. :/

  • brlcad 19 days ago
    Boggles my mind when coders don't save everything they've ever written. It's easy to be a digital pack-rat without much consequence.

    That said, my first Java 1.02 programs from the 90's still compile and the old jars run surprisingly well too. Color me impressed!

    • ks2048 19 days ago
      It was quite different before the internet. I'm still holding out hope of finding some of my old BASIC programs from the 80s on a 5¼-inch floppy disk in my parents' basement. But they are probably gone.
      • j_french 19 days ago
        I found some of my first BASIC programs recently, written in 89/90 on an amstrad464. They're on cassette tape. I have a tape deck with line out, but I don't even know how to start trying to get data off an "audio" cassette tape these days?

        The programs weren't fancy: one was for picking lotto numbers for my mam (the national lottery had recently launched in Ireland so it was a novelty.) Also I was 10.

      • theanonymousone 19 days ago
        > before the internet

        Even before GitHub, probably. Dropbox was a big step forward, still.

        • camtarn 19 days ago
          Eh, not really. Even before source control was widely used by non-professionals, there was still the habit of copying all your stuff over whenever you upgraded to a newer hard disk. I've got random stuff sitting on my hard drive that probably dates to my first PC in around 1996.
      • code_duck 19 days ago
        I wish I had the Logo and BASIC programs I wrote for the c64 in the early 80s. I still have the disks, so there's vague hope. Even more, I'd love the animations and images I made on the Amiga later in the decade, but that's more unlikely.
    • dolmen 19 days ago
      Being a programmer and being an archivist are two different mindset and two different jobs.
  • eurekin 19 days ago
    > Download the jar file > https://github.com/khiner/CrosswordFiller/WordFillVer2.jar

    Returns:

    > Not Found

    currently

    • danlindley 19 days ago
      It can still be downloaded via the file on the repo, just not using that direct link in the description. I'm not sure how the maintainer came to determine that is the link, since I'm almost certain that never would have been the way.
    • khiner 19 days ago
      Fixed, sorry about that
  • jandrese 19 days ago
    I wrote some Hypercard stacks back in the 90s and uploaded them to AOL. A couple of years ago I found it again on archive.org complete with emulator.
  • alhsn 19 days ago
    I suggest that you reverse engineer (decompile) the jar file and check the java code too. If you didn't know, it is very easy to do.