This week we have two extra podcast episodes for you, sponsored by Oracle, which is celebrating the fact that the Java programming language has been going strong for over a quarter century. Originally conceived as an operating system for interactive set-top boxes, Java is now active on more than 45 billion virtual machines around the globe. From computers to cars, from Minecraft to the Mars Rover, its reach is astonishing. We dig into the history of why it was developed and what allowed it to flourish to such a degree.
For this episode we chatted with Georges Saab, Vice President of Software Development at the Java Platform Group and Manish Gupta, Vice President of Global Marketing for Java and GraalVM.
In the beginning, the nascent Java language project, codenamed Project Green and later Oak, was designed to create interactive televisions. Think of the kind of overlays and interactivity that you see with most flat screen TVs today. Back in 1995, this was brand new territory. There was no hardware or operating system standard for a computing platform within a TV, so the team had to figure out how to create a programming language that could run on virtually anything. Code it once and run it everywhere through a virtual machine.
Interactive TV was ahead of its time in the early 90s, but Java found a strong foothold for its cross-platform ideas in web applets and WebStart programs that downloaded and ran an application entirely from a web address. This evolved over time, and today it provides a lot of the processing muscle for server-side web apps and cloud-based SaaS applications. Here at Stack Overflow, the Java tag has remained one of the most popular over the years, with 1.7 million total questions on the site.
When Sun announced Java in 1995, they did so with Marc Andreessen—then cofounder and “rockstar” at Netscape—on stage with them. Andreessen had agreed to integrate Java into the Navigator browser, a major coup for a brand new language. At the time, Navigator was the clear leader in the browser market, taking over 75% of the share. Even before this announcement at the SunWorld conference, the volume of downloads of the language became so great that it overwhelmed the T1 line attached to the java.sun.com web server.
Today's episode covers the past and present of Java. Tomorrow, we'll air episode two, which takes us from the present and looks towards the future. If you want to learn more, Oracle has put together a wealth of resources to celebrate Java's 25th anniversary.
Georges Saab The difficulty I think is really achieving that balance. Right? It's like doing evolution is easy. Never changing anything is easy. But how do you change things in a way that brings people along, brings their code and their investment along, but you know, still remains relevant in helping people solve, you know the new problems that they're trying to solve today.
Ben Popper Hey, everybody, this week's episode of the Stack Overflow podcast is brought to you by Oracle. It's a little bit special instead of pre-roll or mid-roll advertising, this is a completely sponsored episode, we're going to be chatting with two great folks from Oracle about 25 years of the Java programming language. It's past, its present, and its future. Today is part one and will be airing part two tomorrow. So I hope you enjoy. Hey, everybody, welcome back to the Stack Overflow podcast I have with me as always my wonderful co-hosts Paul and Sarah. How you doing y'all?
Sara Chipps Good!
Paul Ford Hello! I'm looking up what the 25th anniversary gift is. [mmmm] Silverrrr!
SC Oh good question. Silver!
SC Oh great.
PF It's the silver anniversary for Java. What is Java married to? What anniversary are we selling? Married to the server?
BP With us this week. We have two special guests from Oracle. We have Manish Gupta and Georges Saab, would you like to introduce yourself, get on the mic a little and tell us who you are and what it is you're doing over at Oracle?
GS Yeah, hi, folks. Georges Saab here. I am the Vice President of software development. That means that all of the folks at Oracle who are working on developing and evolving Java are in my group and that you know, includes everything from, you know, specifications to implementation, working in open JDK on the JVM, the Java language, all of the Java libraries that's, you know, everything from development, quality assurance, sustaining, performance, PM, RM, all that good stuff.
Manish Gupta Hi, this is Manish Gupta. My team at Oracle is responsible for marketing of Java and GraalVM globally.
PF Can we get a sense of this ecosystem? Number of users, number of libraries, just like what are the when you talk about Java in a kind of quantifiable way, what do you say?
MG And I'll give you one number that probably has the largest meaning. There are 45 billion active Java virtual machines running around the world.
PF Where are most of them? Where are they mostly?
MG They truly are all over the place. You know, Java with 25 years is in every industry or every geography, whether it's a small business or a massive organization, whether you're driving a bus, riding a car, flying a plane. Java is empowering and fueling that engine.
PF Can we talk about about where Java came from? I sort of am fascinated to get it from the horse's mouth. So what I know is that Sun Microsystems kind of wanted to, like make a thing for remote controls. They called it Oak. And then something happened. And now there's 40 billion devices. Can you fill in? Can you fill in some blanks?
GS Yeah, sure. So, you know, it was kind of interesting, a lot of the work early work that was done on you know, what, at the time was called Oak was focused on set top boxes, set top devices, you know, which at the time, I think a lot of people in the world were kind of thinking was going to be a more accessible way for sort of, you know, normal, common people to be able to access the internet.
PF Oh, and buy buy stuff use on TV, there's actually a name for it, which is shows how the idea is Rachel's sweater from friends, like you'd be able to just buy Rachel's sweater.
GS And and then I think, you know, I mean, one of the things that that sort of happened at the time, I mean, lots of those user interfaces were kind of weird and clunky and difficult and so on, but at the same time, you know, the internet as a sort of consumer phenomenon really started taking off, right. So, you know, around the like early to mid 90s, the internet expanded more sites became available, people became more interested in using it and found ways that often, you know, did not involve set top boxes. But one of the things that really was true at that time was that most of the content that was there was kind of boring, right? It was fairly static. And so, you know, the folks behind what eventually became called Java, you know, kind of looked at this and realized that they had built something that was, you know, pretty interesting and easy to get your hands around and had a lot of potential. And so one of the sort of first things that came along that really put people that put Java into people's consciousness was an agreement of partnership that was done with Netscape, who at the time, you know, were sort of had this fledgling browser that was pretty cool and they were trying to get people to use it. You know, they ended up making an agreement that they would bundle Java into the browser. And so what that allowed people to do was write web pages that in the HTML could embed an applet tag. And that applet tag would make the the browser client say, Hey, I'm gonna download a bunch of code from the server. And then I'm going to run it and it's going to do something active, something more than just display a little bit of text from that we got a lot of crazy things like, you know, Duke, the Java mascot doing cartwheels and you know, bouncing heads and stuff like that, but also a lot of practical stuff, right, like a lot of the early interaction models for things like online banking, actually use Java in order to do those sort of more complex a little bit, you know, more more intelligent stuff.
MG And actually even interactive television when I go back to my days at '95, '96, '97. I was at Apple working on interactive televisions, the set up boxes that Apple is making and Java was all the rage at that time. So I think the original purpose was solved. And that interactive television has certainly evolved to what we see today as streaming video, and those things would just not be viable without Java.
BP Yeah, no. Now I talked to my TV and I tell him what I want. And occasionally it offers to let me buy something from what I'm seeing on the screen. If I'm using an Amazon Fire.
PF It's just it's not Rachel sweater. It's the actual episode of friends. That was the thing like it's... help me understand. So I remember this era, I've got applets. I've got Java. It's got standard library. It runs in the browser. At one point, I think there was even a whole Java based browser called Hot Java, like, there were way back. And then it seemed to kind of I don't know, it wasn't exactly losing steam because it was everywhere. But the web sort of kept growing and growing and Java became one part of the story. And then one day, instead of running Apache on your web server, everybody was suddenly building server side Java, kind of in an enterprise capacity, and this whole sort of like, world of serious programming was coming into the web with Java on the back end. And frankly, I love this stuff. And I never understood like how that grew and how one became the other like, how did it migrate onto zillion Linux servers?
GS Yeah, so I think, you know, the that evolution is interesting. And there was a lot that was going on behind that, right. So if you want to say that some of the initial excitement around Java came from the fact that it was bringing life to something that previously had been static, there was an equivalent sort of excitement that was going on for software developers. And what I mean by that is this that, if you recall, at the time, one of the big challenges for people writing software was the very fragmented landscape in terms of the different kinds of platforms that you had to support. But for software developers, what that meant was that you basically had to decide, you know, who you thought your users were? And which of these platforms was most important to them? And you were probably going to start out developing for that. And if you didn't know, you are going to choose Wintel because that was the big one, right. And then basically what would happen is, if you were successful, you would pretty soon have people coming back saying, well, we really love your application. But we want to run it on this Unix, or we want to run it on Mac, or we want to run it on something else. And so for many software companies, they would have teams that were almost as big as their initial application development team that did nothing but port the application to five different platforms. And that, of course, was not much fun for many developers. But more importantly, it was it was inefficient, it was costly. And it meant that people didn't necessarily get the same experience on those different environments. And one of the things that, in some sense, the web enabled but also Java dovetailed into was the idea that your experience could be the same no matter which of these platforms you ran on. And for Java and software developers even more, you could write the application once and actually have it run on all of these different platforms. So as the sort of making more intelligent back ends, and people are choosing what environment to use, they're the same was true. If I'm going to write an application server, I'd like to write that once and have people be able to run it on on you know, a multitude of Unix is including Linux, Windows, you know, whatever.
PF Well, and you know, it would run on your it would run completely in your IDE, right? So you could also like you could you had the whole server setup that I do remember that being really foundational where it was like, oh, okay, I don't, I don't need to mess with a staging server to get my work going or move stuff over. I can actually just start manipulating and pretending whatever Windows desktop by every now is going to be is the same as the Unix box in the cloud where this is gonna live.
GS That's absolutely right. Right, the fact that you know, you could be self sufficient and write something and see how it was going to work when you actually were deploying it on, you know, some, some big metal was great. I think there was another key though, too, which was that Java came along, not just as, you know, a new language that was frankly fun to write and, you know, didn't give you a bunch of easy and obvious ways to shoot yourself in the foot the way, you know, maybe C or C++ did. It also came with a very rich standard library of classes, and that that library anticipated because it came up in the environment of the modern internet. So rather than having to grab a bunch of libraries from different places, you actually had a bunch of the pieces that you needed to do things like IO parallelism, etc. Already, just right there at your fingertips.
SC I think a lot of what I've seen and enterprises really respond well to it with Java is a type safety when there's lots of developers working on things, they really, they really like that as well as the strong object oriented design, which at the time wasn't something you saw often, right? Like now, it's something we take for granted. But the late 90s and early 2000s, it was something that was not standard. What do you see draw the drawing people to the language now 25 years later?
GS So I think one of the things that that continues to draw people is that we've really tried to put Java at a good spot between constant evolution and providing things that help you solve problems with a sort of conservatism and, and, and focus on compatibility so that the code you wrote years ago, still works great today,
PF How much bigger of a language is it then, you know, standard library syntax, it's than it was when it launched like how if if somebody was comparing the two what would they think?
GS So it definitely is bigger. I think, you know, the in the sort of early days and, you know, from 1.0, 1.02 and you know, all of those sort of intervening releases, the library grew a lot. And the group grew a lot like when I joined the Java development team as a, you know, young, fresh faced engineer with only only about 10 years of experience under my belt, you know, we were like, 35 people. And, you know, I left the group five years later, and went off and did other Java stuff and eventually came back. But at that point, I think we were like, over 1500. So it grew really rapidly. And, you know, it wasn't also just that group at Sun, right. There were people all across the industry who were interested in contributing to Java and I think that's also something that led to success, right is it was never about, you know, just one vendor. It was always something that was brought into free movement. But you know, to, to your point, I don't have at my fingertips, the exact number of classes and so on, but definitely grew significantly. Now, having said that, I think it got to a point, you know, around 1.5 1.6, where maybe the library was not growing that much. But there was more focus on how do we evolve the language, right? Are we creating ways of making it easier for programmers to express certain kinds of ideas? And this is something that we really have focused on in the last few years, you know, at Oracle is thinking of, well, what are the ways that people want to program, right? What are the kind of language constructs that go beyond just you know, basic object orientation, we recognize that for certain kinds of problems, people really like to take a functional approach. And so we found a way of adding support for closures for lambdas to the Java language and used it in library. Doing that kind of change is one that is in some ways more challenging because the temptation is to just quickly bolt more and more stuff on the side and then you know, You kind of quickly end up with something that is so big and complicated, that you've now printed off what you can do in the future, right? And even worse, you might have something that's hard for people to understand. So what we've always tried to do is really, if we're not sure how to do something in a way that feels right and natural and a part of Java is actually take longer, because obviously, we don't understand it well enough yet.
PF Well, and actually talk us through that process a little bit. I mean, 1500 is a lot of a lot of people. And so something like lambdas, for closures, a sort of relatively abstract thing and has to come in, it's going to be in the language, it's going to go out, it's going to go out to, you know, eventually billions of installs all different languages needs to be communicated to and how do you get a feature like that spread out to the world, you know, somebody has the idea. And then eventually, it's on billions of devices just from a very high level. What's that process look like?
GS Yeah, so the design and develop meant that we do at this point we do through open JDK. So our, you know, developers who are leading projects to look at initiatives like things we want to add to the language. You know, we do the standardization part of that in the Java Community Process, the JCP. And we work on the design and the implementation in the open JDK community, which, you know, gives a way for people from, you know, lots of different companies to collaborate. Now, typically, the way this happens is, we'll have you know, somebody who leads these projects and most of those projects are led by folks on my team at Oracle, who have a vision for you know, the way we want this to evolve, but they will often go through a lot of design discussions, understanding what is it we want to enable, but also what is a particular design prevent? Are there things where making a certain choice, you know, enable certain things but like might prevent us from doing something later that we want to be able to do and maybe There's a different design that allows us to avoid that. And sometimes, like in the case of lambda, it can actually take multiple prototypes and revisions. And so what we typically do for that is we're working on on it in a project that can deliver binaries for people to test and give feedback on. And that's a pretty important thing. Because when something comes into the mainline and goes into a Java release, that's something we take very, very seriously. Right? So we're going to have to live with that everyone's going to have to live with that for, you know, the next 25 years. So it's really important that we get it right. And so for instance, with lambda, I think there were, you know, at least three different designs that we tried, got feedback on, you know, on different aspects of and revised. So, you know, lambdas and Java could have come out, you know, five years earlier, but no one would have liked them, and they would have been really clunky and the performance would have been bad and they would have prevented a bunch of stuff that we've been able to do since. So instead, you know, what we did was took the time tried it out try different things considered the, you know, the the positives and negatives. And ultimately, what we found was the design we ended up with. And this is your question of, well, how does it get out there in the world? The design we ended up with a super simple and elegant, but it wouldn't have been super simple and elegant. If we had taken the first attempt. Right. It was the hard part was slimming it down to really just the essential bits, and making it really feel like a natural extension of the Java that people know and love.
BP Yeah, Sara, you have a lot of experience with both like, you know, open source governance and working with community. And then as an engineering, you know, manager doing stuff at Stack Overflow. How does what George was just talking about kind of square with your experience doing projects that have these these longer timescales?
SC Yeah, I was just listening to you and thinking about, so at Stack Overflow, we have a 10 year old application and a 10 year old application accrues a lot of debt. One thing, for example, one thing we did recently was at dark mode, and something that sounds like a simple thing. It's really hard when you have an applicant that was built before less and sass and variables and CSS were even a thing where you could easily switch things out. I was just thinking about that as I listened to you and imagining the type of technical debt you would have to pay down to easily add in things like lambdas. I was also reading about how you all are currently in the process of moving the JDK from Mercurial to Git, which sounds very much like dark mode, where it's like one of those things that Oh, that sounds easy, just like move it.
GS How hard could it be?
SC Just like do it. But I can only imagine what it's like, yeah, 25 years later, changing source control, what's that been like?
GS That's a bit of an interesting process. And it probably takes longer than anyone could imagine. But it it takes longer, because, you know, we're exacting, and we're careful. And we want to make sure that we're making the right decision and we're kind of bringing, you know, everyone along who's who is contributing and working on it. So, you know, I think for the move of, of source code systems, that something that, you know, again, we tried out in a project, we tried a bunch of attempts, we put in support for moving from one to the other and have been migrating projects, starting with some of the smaller ones to see, how did it work? What was their feedback? What were the things that they felt were positive? And were making their development experience, you know, more smooth and faster? Or what were some of the things that were holding them back where we might need more infrastructure? Ultimately, you know, some of the people who were kind of most skeptical of this because they knew what they had, they knew how it worked. They knew they were productive. Why should I change? Also, you know, once they tried it out, found that it wasn't that bad. There were a lot of positives. And what's more, you know, using something that has a lot more users meant that it was more accessible to more people and they could see the benefit of it. So you know, those kinds of things are, they're never easy, right? Like technical debt is something that you know, many projects have to put up with or live with. And, ultimately, you know, it's sort of a question of how important is it for you to be able to move forward and are there parts that you can identify where you can have some kind of migration path that makes sense.
BP Thanks for listening to the first part of the Oracle episode celebrating 25 years of Java. Tune in tomorrow for part two.