Wednesday, July 28, 2010

Wikileaks To Leak 5000 Open Source Java Projects With All That Private/Final Bullshit Removed

EYJAFJÖLL, ICELAND — Java programmers around the globe are in a panic today over a Wikileaks press release issued at 8:15am GMT. Wikileaks announced that they will re-release the source code for thousands of Open Source Java projects, making all access modifiers 'public' and all classes and members non-'final'.

Agile Java Developer Johnnie Garza of Irvine, CA condemns the move. "They have no right to do this. Open Source does not mean the source is somehow 'open'. That's my code, not theirs. If I make something private, it means that no matter how desperately you need to call it, I should be able to prevent you from doing so, even long after I've gone to the grave."

According to the Wikileaks press release, millions of Java source files have been run through a Perl script that removes all 'final' keywords except those required for hacking around the 15-year-old Java language's "fucking embarrassing lack of closures."

Moreover, the Perl script gives every Java class at least one public constructor, and turns all fields without getters/setters into public fields. "The script yanks out all that @deprecated shit, too," claims the controversial announcement.

Longtime Java programmer Ronnie Lloyd of Austin, TX is offended by the thought of people instantiating his private classes. "It's just common sense," said Lloyd, who is 37. "If I buy you a house and put the title in your name, but I mark some of the doors 'Employees Only', then you're not allowed to open those doors, even though it's your house. Because it's really my house, even though I gave it to you to live in."

Pacing and frowning thoughtfully, Lloyd continued: "Even if I go away forever and you live there for 20 years and you know exactly what's behind the doors — heck, even if it's a matter of life and death — plain old common sense still dictates that you're never, ever allowed to open them for any reason."

"It's for your own protection," Lloyd added.

Wesley Doyle, a Java web developer in Toronto, Canada is merely puzzled by the news. "Why do they think they need to do this? Why can't users of my Open Source Java library simply shake their fists and curse my family name with their dying breaths? That approach has been working well for all the rest of us. Who cares if I have a private helper function they need? What, is their copy/paste function broken?"

Wikileaks founder Julian Assange, who coined the term "Opened Source" to describe the jailbroken open-source Java code, fears he may be arrested by campus security at Oracle or possibly IBM. The Wikileaks founder said: "Today the Eclipse Foundation put out a private briefing calling me a 'non-thread-safe AbstractKeywordRemovalInitiatorFactory'. What the fuck does that even mean? I fear for my safety around these nutjobs."

The removal of '@deprecated' annotations is an especially sore issue for many hardworking Java developers. "I worked hard to deprecate that code that I worked hard to create so I could deprecate some other code that I also worked hard on," said Kelly Bolton, the spokesperson for the League Of Java Programmers For Deprecating The Living Shit Out Of Everything.

"If people could keep using the older, more convenient APIs I made for them, then why the fuck would they use my newer, ridiculously complicated ones? It boggles the imagination," Bolton added.

The Eclipse CDT team was especially hard-hit by the removal of deprecation tags. Morris Baldwin, a part-time developer for the CDT's C++ parsing libraries says: "We have a policy of releasing entire Java packages in which every single class, interface and method is deprecated right out of the box, starting at version 1.0."

"We also take careful steps to ensure that it's impossible to use our pre-deprecated code without running our gigantic fugly framework," the 22-year-old Baldwin added. "Adding public constructors and making stuff non-final would be a serious blow to both non-usability and non-reusability."

The Agile Java community has denounced the Wikileaks move as a form of terrorism. "It was probably instigated by those Aspect-Oriented Programming extremists," speculates Agile Java designer Claudia Hewitt, age 29. "I always knew they wanted to use my code in ways I couldn't predict in advance," she added.

Many Java developers have vowed to fight back against the unwelcome opening of their open source. League of Agile Methodology Experts (LAME) spokesperson Billy Blackburn says that work has begun on a new, even more complicated Java build system that will refuse to link in Opened Source Java code. The new build system will be released as soon as several third-party Java library vendors can refactor their code to make certain classes more reusable. Blackburn declined to describe these refactorings, claiming it was "none of y'all's business."

Guy Faulkner, a 51-year-old Python developer in Seattle, was amused by the Wikileaks announcement. "When Python developers release Open Source code, they are saying: Here, I worked hard on this. I hope you like it. Use it however you think best. Some stuff is documented as being subject to change in the future, but we're all adults here so use your best judgment."

Faulkner shook his head sadly. "Whereas Java developers who release Open Source are code are saying: Here, I worked hard on this. I hope you like it. But use it exactly how I tell you to use it, because fuck you, it's my code. I'll decide who's the goddamn grown-up around here."

"But why didn't they write that Perl script in Python?" Faulkner asked.




MORE NEWS

Previous article: San Francisco Airport Announces That All Restrooms Near You Are Now Deprecated
The SFO port authority announced today that all airport restrooms located anywhere near you are now deprecated due to "inelegance". The newer, more elegantly designed restrooms are located a short 0.8 mile (1.29 km) walk from the International Terminal. Read more

Next article: Eclipse Sits On Man's Couch, Breaks It
New Hampshire programmer Freddie Cardenas, 17, describes the incident: "We invited Eclipse over for dinner and drinks. Eclipse sat down on our new couch and there was this loud crack and it broke in half. Those timbers had snapped like fuckin' matchsticks. Then my mom started crying, and Eclipse started crying, and I ran and hid in my bedroom." Read more

77 Comments:

Blogger Ben said...

holy shit. l'mayo.

2:06 PM, July 28, 2010  
Blogger Tom said...

Awesome, onion quality, made me cry ;)

T.

2:15 PM, July 28, 2010  
Blogger Pierre-Henri Trivier said...

Java's not even *fun* enough to laugh at. I expect after your sabbatical you would be trolling at Scala or Haskell or Go !

What's next ? Jokes about making GUIs in VB ? Pshh.

Seriously though, I can get the attack on privateness and finality. From someone with a strong dynamic tropism, that makes sense. But that good old @deprecated tag ? The ability to publically acknowledge your disgust at something *you* wrote, so that people get a chance to stop using it because, well, you know, it doesn't work (or the method is called getFoo, but what it actually does is setting bar and blowing up the nuclear plant, but we don't want to break your precious client code) ?

Sure, we would all like to write perfect code now and then (well, we might even like writing decent, or hell, somehow working code from times to times), but can you really blame those people with an imposter syndrom that just want to apologize to the face of the world ?

Anyway, this post doesn't have the necessary amount of parentheses to qualify as a programming post on this blog. I'll wait till the real fn begins.

2:23 PM, July 28, 2010  
Blogger Görkem PAÇACI said...

Excellent work :)... 'Onion' quality, as put by Tom.

2:24 PM, July 28, 2010  
Blogger cjb said...

Awesome!

2:34 PM, July 28, 2010  
Blogger Drew @ Cook Like Your Grandmother said...

Wait, you mean they're not really doing it? Damn, got my hopes up for nuthin.

2:48 PM, July 28, 2010  
Blogger Andrew said...

I laughed so hard I almost lost a lung!

2:50 PM, July 28, 2010  
Blogger Ryan said...

This is a pretty good post.

One thing though, final is a really good hint to help the compiler optimize. Static finals that will never change can be optimized out at run time, which is really awesome. I've seen it in action, it really works!

2:52 PM, July 28, 2010  
Blogger Gordon J Milne said...

I loved this sarcastic take on the joys of using other people's Java code. I just wished that C++ had managed to cop some of the flak because it deserves a lot more of it. Many days I see C++ as write-only.

As you may suspect, I have moved from a mostly Java environment to a mostly C++ one and that C++ feesl fugly.

3:03 PM, July 28, 2010  
Blogger Jimmy said...

Here, I worked hard on this. I hope you like it.

No, what the python programmer actually said was

Here, I worked hard on self
I hope you like self.__it__()

3:08 PM, July 28, 2010  
Blogger malkia said...

In a global header long time ago, a friend of mine (and big "C" lover) did this to his best buddy once (a C++ and especially boost lover):

#define class struct

#define private public

#define protected public

3:11 PM, July 28, 2010  
Blogger Olie said...

Java w/...bullshit removed.

:)

3:16 PM, July 28, 2010  
Blogger Sam said...

This is so absolutely spot-on.

3:37 PM, July 28, 2010  
Blogger LongSteve said...

#define private public

That is genius, probably the most useful thing I've read in a blog comment in years :-)

4:11 PM, July 28, 2010  
Blogger Samuel A. Falvo II said...

Thank goodness you're back! And with a vengence too! CLASSIC! We really need more articles like this!

4:27 PM, July 28, 2010  
Blogger Fred Blasdel said...

malkia: note that Java's designers made sure that you can use the c preprocessor without any trouble.

It was popular in JavaME development since Write Once Run Anywhere was such a crock.

4:28 PM, July 28, 2010  
Blogger Rohan said...

Hilarious! I eagerly await your first novel.

4:49 PM, July 28, 2010  
Blogger Garth said...

This is brilliant, made my day. A toast to the open/closed principal.

6:22 PM, July 28, 2010  
Blogger sahglie said...

Shit, that is funy!

7:37 PM, July 28, 2010  
Blogger Riley said...

Welcome back!

7:49 PM, July 28, 2010  
Blogger rishav said...

holy shit. .. Welcome Back !!!

8:51 PM, July 28, 2010  
Blogger nash said...

Genious! You've been missed mate.:)

11:12 PM, July 28, 2010  
Blogger Daren Thomas said...

Thank you Stevey. Glad you are back. You're the King of the Knights Who Bust Those Who Use Nouns!

12:16 AM, July 29, 2010  
Blogger SteveL said...

if you look at the hadoop codebase, you can see that it has custom attributes to indicate stable/unstable and internal/external. these are hints for people downstream, markers to say "don't complain" if you worked with something that was internal and unstable and then it broke. but people can use them if they want to, they just need to know the risks -and get on the dev mailing lists if they want to help stabilise things.
Social rules, not runtime ones.

12:37 AM, July 29, 2010  
Blogger JamesB said...

Very good :) As a CDT developer (and chief @Deprecated criminal) We take pride in deprecating API before it's final -- it's all part of a fun days work!

1:21 AM, July 29, 2010  
Blogger Jérôme Radix said...

"But why didn't they write that Perl script in Python?" Faulkner asked.

...because Perl really hates object orientation, deprecation, finalization and privation.

The question to ask is "But why didn't they translate automagically all 'open source' java code into Perl one-liners ?"

1:36 AM, July 29, 2010  
Blogger Wim said...

Heh, I agree nearly 100% though not quite on @deprecated. Mostly because the only place I've seen it is in the java API's where it actually seems to point to better solutions most of the time.

Let's not talk about the Date API. That whole thing should've been deprecated the minute they wrote it.

Then again, I've only had the displeasure of using eclipse (with the m2eclipse plugins, cause I like to watch my pc fall over trying to *initialise* the framework).

1:41 AM, July 29, 2010  
Blogger Andrei Vajna II said...

removes all 'final' keywords except those required for hacking around the 15-year-old Java language's "fucking embarrassing lack of closures."

That's what I was afraid of when I first saw the news, but I'm glad they covered this part, because that makes the script actually useful for our project at work. Good thing I can manually change the modifiers when needed.

2:15 AM, July 29, 2010  
Blogger Itay Maman said...

I once wrote a class called Hack with a method get(Object o, String fieldName) which allowed me to get (via reflection) the value of a private field.

I wrote as I trying to make BCEL (Bytecode Engineering Library) do some things it was not intended to do. It practically had all these capabilities in the first place, but in order to get to them I had to reach out and touch some private fields.

So, I had two choices: (a) modify the source code; (b) creatively use reselection;

I chose option (b). True, my code will not run in some environments where security policy is set to "panic" but at least I don't have to manually edit the BCEL source code every time a new bug-fix release is coming out.
code

2:38 AM, July 29, 2010  
Blogger Nick Brown said...

You bloody hero.

3:20 AM, July 29, 2010  
Blogger <Martani/> Fakhrou said...

Awesomeeee :D

3:42 AM, July 29, 2010  
Blogger Paul Lasek said...

I'll say that I agree with changing private to public (Because, frankly speaking, it's all bullshit in the end), however not about final/static - Remove that and Java becomes much slower (and suddenly might not be as fast as C because every call will have to do argument type assertions :/)

3:44 AM, July 29, 2010  
Blogger Itay Maman said...

@Paul Lasek: not necessarily. The JIT can do wonders.

3:50 AM, July 29, 2010  
Blogger Chris Bird said...

My favorite trick in the old days of character mode devices was to remap the letter "e" to and the letter "o" to null. It then became impossible to edit the script to remove the line, and it was impossible to logoff!

Oh and for those who wonder it was 1974 and the interactive system was IBM's TSO (Time Sharing Option). Of course that isn't possible any more!

5:50 AM, July 29, 2010  
Blogger Christopher Scott said...

"fucking embarrassing lack of closures." best line ever

6:10 AM, July 29, 2010  
Blogger Jason Craft said...

We need the world to know of the evils of Java!

7:41 AM, July 29, 2010  
Blogger Matt Williamson said...

Yes, very onion-y. Love it

8:30 AM, July 29, 2010  
Blogger Chris said...

Wikileaks also to release version of python without whitespace snobbery, and the ability to do things the language designers haven't officially approved.

8:53 AM, July 29, 2010  
Blogger Michael Haren said...

This is incredible.

10:36 AM, July 29, 2010  
Blogger akuhn said...

@ryan this is a common myth, but in fact final fields are not final at all. You can change them at runtime. And ininling of final static fields in the bytecode is generally considered a design flaw these days. It introduces dependencies between class files whereas the JIT could get that inlining job done even better at runtime. All of Java's speed comes from runtime optimizing in the VM, the compiler does zero optimization.

10:38 AM, July 29, 2010  
Blogger Erik van Oosten said...

Does the perl script also remove the checks of eclipse classes that prevent subclassing?

12:17 PM, July 29, 2010  
Blogger Pierre-Henri Trivier said...

Steve, you're preparing yourself for the mother of all follow-up-explaining-why-I-was-just-kidding-with-a-dash-of-seriousness post, according to what I could read in the interwebs ...

http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/

Or maybe that's just a way to demonstrate your "you can't please everyone" theory ?

1:44 PM, July 29, 2010  
Blogger ♫gaurav♫ said...

I actually opened a tab to checkout Wikileaks. Sigh.

10:31 PM, July 29, 2010  
Blogger Stela James said...

open source project is a working good because it is accessed by each and every person and makes changes...
home jobs

2:36 AM, July 30, 2010  
Blogger Denton Gentry said...

I think this post is eliciting another round of "StabbityStabbityStabbity" responses. Fun.

7:03 AM, July 30, 2010  
Blogger Anshul said...

Brilliant! And timely, as I was just working on some Hadoop code which apparently has come under the wings of the League of Java Programmers for Deprecating the Living Shit out of Everything.

4:20 PM, July 30, 2010  
Blogger kul908 said...

haha, that was brilliant!! I laughed so much!

5:56 AM, August 01, 2010  
Blogger ankur said...

That was hilarious man. Most of your writing is too smart for me, but this one was just about matched my brainwave cycle. Nice post, as someone said, Onion quality

11:36 AM, August 01, 2010  
Blogger Adam said...

You weren't kidding when you said you were "overwhelmed with onions" in your last post.

10:34 AM, August 02, 2010  
Blogger Tim said...

This is good stuff. I'd give this post a solid 67% approval rating. :)

10:45 AM, August 02, 2010  
Blogger Paul Nathan said...

In related news, some monkeys were sighted at a Seattle airport, carrying Starbucks and some carefully folded patches. When interviewed about their purpose in Seattle, they responded, "We're bringing our well-known patching abilities to Java programming"

12:33 PM, August 02, 2010  
Blogger Dan Weinreb said...

Re "enfranchisedmind.com": As I said in http://danweinreb.org/blog/advice-about-sending-email, whenever you use sarcasm, at least one person will actually take you literally. In this case, there appears to be a severe lack of a sense of humor. Anyway, I totally cracked up! Excellent!

8:32 PM, August 03, 2010  
Blogger Arancaytar said...

I was just grinning until I got to "non-thread-safe AbstractKeywordRemovalInitiatorFactory", which sent me rolling on the floor!

(In related news, explaining the joke to someone who has never coded in Java is next to impossible.)

11:24 AM, August 04, 2010  
Blogger Rman1968 said...

This is the BEST damn laugh I've had in a long time. Awesome shit!

p.s. Disregard everything I just wrote and read my new comment

11:42 AM, August 04, 2010  
Blogger Jocelyn said...

Epic! LOL in my office right now!

2:42 PM, August 06, 2010  
Blogger Christophe said...

uh oh, you do realize this is going to completely break clojure's persistent data structures :)

8:49 PM, August 07, 2010  
Blogger anab01 said...

I like the topic which has been discuss by you,i want to say thanks to you for sharing with me such a nice info.hpoe you'll soon give me more info regarding this topic,I'll waiting for that.
==============================
top bpo companies in india

10:14 PM, August 10, 2010  
Blogger MCAndre said...

Hip hip hooray!

12:36 PM, August 11, 2010  
Blogger RoutineMachine said...

Every time a you make fun of Java, Oracle files another patent lawsuit. Happy now?

5:59 AM, August 16, 2010  
Blogger Xah Lee said...

read this few days ago. was wondering why there's no reference link to the original annoucement, the oddity of this piece, and was about to lookup. Then, i realized. Scrolling thru the comments confirmed. lol. Nice one.

5:27 PM, August 18, 2010  
Blogger nomike said...

Stop all that nonsense. Wikileaks decided to publish modifications of open source code. Go on with it. The ability to take somone elses code, modify it and re-publish it is the nature of open source. This is why open source exists.
If you don't want your code being modified like that, then don't make it closed source!


Besides that, if I could decide it I would throw the "protected" and "private" out of the java language. I'm a Java programmer and it bothers me all the time that I have to write dozens of boilerplate code for doing simple stuff. E.g. Getters and setters. Who needs them? Totally senseless. And making things private so no one could use them?
If you flag something as "mayChangeInFuture" or "isNotPartOfTheOfficialAPI". Everyone could still use the methods and variables, but if things break on an update it is his own problem ("You have been warned!").

12:43 AM, August 20, 2010  
Blogger nomike said...

PS: I know this is a hoax, but this is for all the people who don't get it and think it's real.

12:45 AM, August 20, 2010  
Blogger Maruda said...

Joshua Bloch, "Effective Java" (2nd edition) http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/
Please read chapters 13 ("Minimize the accessibility of classes and members"), 14 ("In public classes, use accessor methods, not public fields") and 15 ("Minimize mutability").
And please stop writing "onion quality" code, guys... I want to spend weekends with my wife and children, not fixing your "code for real men". ;-)

5:07 AM, August 20, 2010  
Blogger 承太郎 said...

hello nice to meet you
I read your entry adout Japanese animation.

I know the best animation .
It's name is [garei zero] .
it's very good animation.

7:09 AM, August 21, 2010  
Blogger Amey said...

Hey, yet another satisfied Java programmer!

6:59 AM, August 24, 2010  
Blogger dzex said...

It reminds me ... well actually very many things,- things that seems to be what they are not, never were and never will be.

Please post the link to the source of this so called "Press Release", until I see the link I honestly cannot judge if your article has any ground under.

Sorry, I've being lied too many times in the past...

8:52 AM, August 28, 2010  
Blogger J7 said...

I thought this WAS something from The Onion!! Hilarious!

10:51 AM, September 11, 2010  
Blogger ajmccul1 said...

Your posts are, as always, deeply awesome and thought-provoking. I'm still learning the developer game -- still an intern, with a long way to go -- but your writing always feels like a stimulating conversation with an old friend. They're much appreciated.

Hoping there's more coming,

Adam

1:10 AM, September 23, 2010  
Blogger Mordachai said...

Freaking Awesome! Nerd heaven! Thanks!

1:27 PM, September 23, 2010  
Blogger Njan said...

"But why didn't they write that Perl script in Python?" Faulkner asked. - LOL!!! - blew my hat! :)

7:16 AM, October 25, 2010  
Blogger kleiba said...

Come on, Stevey - it's been three and a half months since you wrote "Wikileaks..."

In "Blogger Finger" you already speculated "that everyone's completely forgotten who I am", but that's not true! I'm sure there are hundreds, if not thousands of people like me out there eagerly checking your blog for updates every hour! (through their feed readers anyway) Because we all read the last paragraph of that post with a sparkle in our eyes where you wrote: "I believe I'm ready to start tech blogging again... in moderation, anyway."

Feed us (and our readers), Stevey! Please! Come on, man, I know you can do it! Oh, oh... unless you can't, of course, because old claw hand came back to you? Ouch, I really hope not.

But I do hope that you'll read this little comment and that maybe it'll fall on fertile grounds.

10:21 AM, November 09, 2010  
Blogger bloggingisstupid said...

> Mitch said...
> Haskell (or something haskell-ish) is definitely the future,
> though--cheap abstraction (which in haskell is enabled by the
> type system, and by purity) is just too big of a win.

Most probably it is not a future nor will be future. It is the same story as it was with a lot "theoretically" perfect languages we've seen over the years that had carisma of becoming future badass languages but except few smaller projects, nobody ever really did anything production-usefull with them. The list is long - Smalltalk, OCaml, ML, LISP, Haskell... They were always in state of waiting for something to happen and that would be the trigger to give them high visibility out there. Just take a look in forums about rants of LISP community - it's always waiting for some new "version" or implementation of LISP that would make it everyones choice.

Don't get me wrong - I even like Scheme (well, I don't LIKE it, but I respect it). Scheme was a breaktrough for me to really get a grasp on recursion. (endless LittleSchemer practices).

Use of "educational" languages is to introduce new paradigms - and then the best parts of them are usually integrated in everyday languages we all use like C++,Java or or JavaScript or even Perl. The only exception I can think of (at least from languages I personally programmed in) is Erlang but Erlang has a bit different background. It was never a language that was buitlt for research - it was built because Ericsson needed such language to build complex telecom systems like their famous ATM switch. But except few Erlang popular projects (CouchDB, some Amazon cloud services, Facebook chat, Yahoo flicker parts, Ericsson stuff) this language lacks productive quality toolchain. If you ever tried to use a profiler in Erlang you would be instantly aware what I'm talking about. Somebody used to Visual Studio or even Eclipse will just run away from Erlang not looking back because of toolchain itself - I won't even mentioned weird (for someone used to C-like) syntax.

In 5-10 years we will still use Java and C++ but most likely they will adopt some of the good features from functional programming which is already happening in both mentioned mainstream languages. New languages and paradigms will appear on horizon - but mainstream will stay the same.

7:31 AM, December 02, 2010  
Blogger Peter Williams said...

This post is still here. Maybe the rumour about Google removing WikiLeaks-related blogs from Blogger is not true.

Or maybe Google are using something more sophisticated than plain keyword search.

2:27 PM, December 04, 2010  
Blogger ashutosh said...

This is my first comment in my life & it is for you Steve... I miss your blogs.Mainly work in C,C++(strictly code in C way. Only additions are "is a,has a and friend") and LUA. Did Java long back..It is an insanely great blog

2:56 AM, December 10, 2010  
Blogger Jhon Davis said...

thats great wikileaks need to leak Mirosoft windows too.


- John Devis
Magento Theme

3:16 PM, December 27, 2010  
Blogger Tech Soup said...

haha ! i was really really scared !!!! :)))

8:01 PM, April 16, 2011  
Blogger Javin Paul said...

This is just simple publicity stunt but they have no right to temper code like this.

Javin
Why multiple inheritance is not supported in Java

8:16 AM, July 20, 2011  

Post a Comment

<< Home