Last weekend I attended FOSDEM, “the biggest free and non-commercial event organized by and for the community”. The Free and Open-Source Software Developers Meeting, held in Brussels, pulls in roughly 4000 FOSS hackers from around the world. I was one of the speakers on the schedule in the Free Java Dev Room, introducing my open source project, Mutability Detector. The lineup was pretty illustrious, including Charles Nutter, co-lead of JRuby, and Mark Reinhold, the Chief Architect of Java Development at Oracle. Here I’ll describe some of my experiences at FOSDEM, and relay some of the interesting stuff people presented. (Apologies if I misremember anything – there was a lot going on at the conference!)

Lost in Translation

First off, let this be a warning to any potential FOSDEM-goers. ULB, the University that hosts the event, has two campuses. Campus Solbosch, where the entirety of FOSDEM happens, and about 11km from that, way over on the other side of the city, Campus Erasmus, where I went. Top tip: when planning international trips to foreign countries that you’ve never visited before, don’t rely on Google Maps.

After a 1hr 30min commute, with the help of a few fellow location-impaired, and thankfully French-and-English-speaking FOSDEM attendees, I finally made it to Campus Solbosch. Unfortunately that meant missing the welcome keynote, the introduction to the Free Java Dev Room, and talks about the OpenJDK from Mark Reinhold and Dalibor Topic. Massive facepalm. Hugely embarrassing. Mothers, don’t let your children grow up to be… someone who goes to the wrong ULB campus for FOSDEM.

Lambdas and Traits and Bears, Oh My

The first talk I saw was by Jeroen Frijters, demonstrating the work he’s been doing to bring JSR292 (Invoke Dynamic) to IKVM.NET, the virtual machine that runs Java on the CLR. Next up came Remi Forax to discuss lambdas in Java. Following a clear disclaimer that design choices and syntax he discussed was still in the air, and subject to change, he showed off an expected feature for the Java language. Named “Virtual Extension Methods”, they allow adding methods to interfaces… with implementations. The motivation being that, along with lambdas, you could put a method like Iterable<T> filter(Predicate<T> predicate) onto, say, java.lang.Iterable, with an implementation, without causing compiler errors in everyone’s code. There was a bit of a collective gasp when some people in the audience assumed this meant multiple inheritance was coming to Java. However, the subtle but crucial point is that with a virtual extension method, it’s not possible to reference state, such as fields. The body of a virtual extension method must rely on the concrete implementations to supply state, with the developer resolving conflicts from inherited methods in the concrete implementation at compile time. That leaves the feature looking a lot more like traits (awesome) than C++ style multiple inheritance with the diamond problem (not awesome).

Following Remi were Raoul Gabriel Urma and Janina Voigt, two PhD students from Cambridge, who used the OpenJDK to explore the use of covariant arrays in the wild. Taking a look at lots of open-source projects, and using the novel approach of modifying the javac compiler to find the code they were interested in, they found that covariance is rarely required, and normal Java generics is usually enough to add type safety to methods employing covariance. I really liked the empirical approach taken to a language theory question, and love the idea they had of setting up some kind of open-source corpus, where those doing similar surveys could quickly get their hands on a huge amount of real-world code.

Community Is Not Just A TV Show

Then came Ben Evans and Martijn Verburg, giving a talk entitled “Politics, Positives, Paperwork and Pain: Our year to date in the JCP”. Ben and Martijn are the leaders of the London Java user group, the London Java Community (LJC), which, in the past year, has won a voting seat on the JCP (Java Community Process). They discussed some of their experiences, from the bad:

– the acronym soup that appear in most every conversation (JCP, JSR, JSPA, TCK, RI… TLA ETC – okay those last two aren’t real)
– phone conference calls with lawyers representing some of the companies involved in the JCP, discussing in minute detail whether to change “notwithstanding” to “nevertheless” in clause 27(g)
– no-show members of the JCP who only participate in discussions after decisions they don’t like have already been made

But they did have a lot of positives to recount:

– completion of the first of several reforms to the JSR (Java Specification Request) process which will make it more open and inclusive, and hopefully “prevent another EJB 2”
– the (surprising) willingness and motivation of several of the bigger JCP members to move towards being more open
– significant takeup of the LJC-led “Adopt a JSR” appeal, which gets everyday developers involved in particular JSRs, from development to evangelism (I myself am signed up to take part in JSR 353 – API for JSON Processing, as we have been building a JSON-based API for one of our products recently)
– drumming up lots of interest in contributing to the OpenJDK from LJC developers, which included a couple of ‘Warnings Cleanup’ hack sessions, where a bunch of hackers dived into the OpenJDK code to pick some low hanging fruit, fix the code, and submit patches. This is slowly pushing the OpenJDK project to make building, modifying and contributing much easier. One such event was hosted here at TIM Group, with all available spaces being taken about an hour after announcing it on

Overall Ben and Martijn are optimistic about the future of the OpenJDK as a community.

Open Sesame

For the rest of the afternoon, we were introduced to several open-source tools: Thermostat for monitoring performance of your Java application; GCSpy for inspecting and visualising garbage collection (here was the first time I heard the humorous quote “If Java had true garbage collection, most programs would delete themselves upon execution.” — Robert Sewell); Byteman which allows you to inject bytecode into classes at runtime, and a DSL to allow you to talk about bytecode at a higher level of abstraction; and CacioWeb, which can let you run a Swing app inside your browser, which struck me as weird thing to want to do, but it had some pretty interesting use cases (e.g. rather than people using VNC to access their own Swing app running in their own JVM, the app can be hosted by a single JVM for multiple users). Steve O’ Grady argued, with some metrics and empirical counts, that Java the language is still not dead, and it’s not only about the JVM either.

The audience were also given the fine treat of listening to me harp on about they should design their classes to be immutable, and how they should totally use Mutability Detector to keep them that way, the lucky devils. It’s not every day you get to hear me crack some lame jokes about how XML sucks (my colleagues, on the other hand…). Some good ideas and suggestions came out of the Q&A after my talk, and I also got a lot of positive feedback (like Mark Reinhold tweeting “@grundlefleck’s Java immutability detector is really cool” — after which I almost audibly squee‘d). Overall Mutability Detector was received well, and I’m really glad I applied to present.

Absinthe Makes The Heart Grow Fonder

Once Saturday’s talks were finished, I was invited to dinner with other speakers and sponsors of the Free Java Dev Room in a restaurant just off Brussel’s Grand Place. Lots of interesting code talk, nice food, and Belgian beer. Having spent a lot of Saturday suffering from Friday night’s excesses at FOSDEMs Free Beer event at a local bar named Delerium, I didn’t fancy a repeat on Sunday. So I ducked out early-ish, before Raoul, the PhD student and Belgian native, could convince me to visit a nearby absinthe bar. Judging by the ‘tender’ disposition of some of the folks on Sunday morning, it appeared to be one of the more sensible choices I made over the weekend.

Fast Ruby and ARMed Java

The first Sunday talk I attended was Charles Nutter discussing JRuby and some of the achievements they’ve made with the project. I was surprised to hear that JRuby on the JVM was (for most things) the fastest implementation of Ruby around, even including native implementations. Then came a talk on how the Eclipse project works. It was interesting to see just how big an ecosystem and community it is, and they managed to ship, on time, on the same date for the past six years. The speaker, Mike Milinkovich, emphasized the importance of predictable releases, and how the Eclipse project has and will drop features to make the scheduled release date. We then heard from Andrew Haley of RedHat, the work he’d been doing to port OpenJDK to ARM processors, and someone from the audience showed an Eclipse installation which was built, and currently running, on an ARM processor machine, which was impressive.

The next talk which (I am told) was excellent, was on a music-based Java project named Gervill. It included a musical representation of a Java program, using the Byteman project demonstrated the previous day, where every call to list.add(), was translated into a note, where the index argument became a position on the scale. I say I was told it was excellent, because I’d actually ducked out of this talk, and into one of FOSDEM’s Hack Rooms, where I introduced Martijn Verburg to the internal workings of Mutability Detector, which lead to the first bit of activity (“frsit psot”, and a patch!) on my project’s mailing list.

The day concluded with talks about IcedRobot (an Android implementation for the desktop), IcedTea and IcedTea-Web (RedHat’s repackaging of Oracle’s OpenJDK sans proprietary parts), and then a free-form discussion on Java, with the likes of Mark Reinhold, Dalibor Topic, Georges Raab (the VP of Software Development, Java Platform Group at Oracle) answering questions and discussing community issues in and around the OpenJDK project. It’s great to see this kind of discussion take place, and it’s somehow always astonishing to me to hear just how many people and projects depend on Java, and how much effort goes into releases, distribution and upgrades. I’m so glad that in my day job here at TIM Group, we generally only work in two week release cycles, developing a hosted web application — some of our problems can seem slightly trivial in comparison!

And thus ended the scheduled talks at FOSDEM. I capped off the weekend enjoying a few beers and dinner with a few of the speakers from the Free Java Dev Room.

Belgium, man! Belgium!

Overall, despite the calamitous beginning of the weekend, attending FOSDEM was a hugely rewarding experience. The speaker line-up for the Java room was impressive, and it looked to be the same for the other tracks and dev rooms, with well known names in the open-source world. The conference also gave me the chance to meet and personally thank Koshuke Kawaguchi for his and the rest of the project’s efforts on the Jenkins CI system that is used heavily at TIM Group. There was a very friendly vibe around the place, and what the organizers accomplish, without ever charging a penny for tickets, is astonishing.

So in summary, if you can make it to FOSDEM (and it definitely helps if you work for a company like TIM Group, that lets you take the time to go, and puts up the cash for travel and accommodation), you definitely should… but you should go to the correct campus.