SLIDE 1 OpenJDK & What it means for the Java Developer
Dalibor Topić Java F/OSS Ambassador Sun Microsystems http://twitter.com/robilad Dalibor.Topic@Sun.com
SLIDE 2 2
Java
SLIDE 3 3
Programming Language
SLIDE 4 4
Virtual Machine
SLIDE 5 5
Cross- platform Programming Environment
SLIDE 6 6
Community Of Communities
SLIDE 7 7
Pretty successful
SLIDE 8 8
~1B LOC
Code written in it (acc. to ohloh.net)
SLIDE 9 9
That's just the
visible space
SLIDE 10 10
What else happened in the last 10 years?
SLIDE 11 11
Open Source
SLIDE 12 12
From fringe to mainstream
SLIDE 13 13
Open Innovation across
boundaries
SLIDE 14 14
Remember shipping containers?
SLIDE 15 15
Changed the world
SLIDE 16 16
Radically reduced transaction costs
SLIDE 17 17
For material goods
SLIDE 18 18
Standardized measures
SLIDE 20 20
Open Source does the same
SLIDE 21 21
For software components
SLIDE 22 22
Standardized Legal Containers
SLIDE 23 23
Permeable development
SLIDE 24 24
Lowered barrier to participation
SLIDE 25 25
Collaborative User Innovation
SLIDE 26 26
What else happened?
SLIDE 27 27
Linux
SLIDE 28 28
From fringe to mainstream
SLIDE 29 29
Cloud, Cluster, Server, Netbook, TV, Phone, ...
SLIDE 30 30
Anyone can create a Linux- based software platform
SLIDE 31 31
shipping yard, fleet & port in one
SLIDE 32 32
Organic growth
SLIDE 33 33
Cambrian explosion of Linux distros
SLIDE 34 34
Selective Pressure On Development Tools on Linux Strongly Favors Open Source
SLIDE 35 35
Manifests itself around: availability, integration, ease of use
SLIDE 36 36
Example: sudo aptitude install openjdk-6-jdk vs. many minutes of manual work
SLIDE 37 37
Example: sudo aptitude build-dep openjdk-6 vs. many hours of manual work
SLIDE 38 38
Open Source
+ Java + Linux
SLIDE 39 39
SLIDE 40 40
OpenJDK 7
SLIDE 41 41
JDK 7
SLIDE 42 42
Open Source
SLIDE 43 43
GPL v2
SLIDE 44 44
Classpath Exception
SLIDE 45 45
2006: From closed to open
SLIDE 46 46
First Step: Get the code
SLIDE 47 47
Putting the effort in perspective
SLIDE 48 48
Mozilla 1.2M SLOCs
SLIDE 49 49
Eclipse 2.2M SLOCs
SLIDE 50 50
OpenJDK 3.5M SLOCs
SLIDE 52 52
Managing expectations
SLIDE 53 53
Pessimist extremists: Java will be forked to death!
SLIDE 54 54
Well, no. Didn't happen.
SLIDE 55 55
Optimist extremists: I want a feature! And I want it now!
SLIDE 56 56
Well, probably no. You can have a go at it yourself, though.
SLIDE 57 57
Culture change
SLIDE 58 58
2007: Cleaning up
SLIDE 59 59
Second Step: 100 % Open Source
SLIDE 60 60
Replacing encumbered third-party code
SLIDE 61 61
Removing structural barriers to innovation
SLIDE 62 62
Fully open source bootstrap
SLIDE 63 63
IcedTea
SLIDE 64 64
Gervill Sound Synthesizer
SLIDE 65 65
64-Bit Plugin
SLIDE 66 66
Packaging
SLIDE 67 67
OpenJDK 6
SLIDE 68 68
2008: Infrastructure & Adoption
SLIDE 69 69
Third Step: Put it to use
SLIDE 70 70
Mercurial
SLIDE 71 71
External Committers
SLIDE 72 72
JDK 7 mainline
SLIDE 73 73
Sidestreams
development
SLIDE 74 74
Feature Projects
SLIDE 75 75
Like NIO2, MLVM & Jigsaw
SLIDE 76 76
Making JDK & JVM suitable for more problems
SLIDE 77 77
Porting Projects
SLIDE 78 78
Like Zero, Shark, BSD Port
SLIDE 79 79
Putting OpenJDK in more places
SLIDE 80 80
Gentoo, Debian, Fedora, Ubuntu, OpenSUSE, Mandriva, Simply MEPIS, Linux Mint Red Hat Enterprise Linux, CentOS, Oracle Enterprise Linux FreeBSD, OpenBSD, NetBSD, MacPorts Poky Linux, Angstrom, OLPC XO
SLIDE 81 81
Removing social barriers to innovation
SLIDE 82 82
2009: JDK 7 Milestones
SLIDE 83 83
Fourth step: Create more
to innovate
SLIDE 84 84
Code going from closed to open
learning curve
SLIDE 85 85
Private conversations
SLIDE 86 86
Insider knowledge
SLIDE 87 87
Easier to learn the ropes writing new code
SLIDE 88 88
Public knowledge
SLIDE 89 89
Searchable knowledge
SLIDE 90 90
In practice: Modularize the code base
SLIDE 91 91
Reducing complexity
SLIDE 92 92
Removing intrinsic barriers to innovation
SLIDE 93 93
Where are we now?
SLIDE 94 94
Gradually growing, diverse Community
SLIDE 95 95
Individual Developers
SLIDE 96 96
BSD Port
Landon Fuller Greg Lewis Kurt Miller Christos Zoulas
SLIDE 97 97
Academia
SLIDE 98 98
Type Annotations Mahmood Ali Michael Ernst
SLIDE 99 99
Corporate Contributors
SLIDE 100 100
Sun, Red Hat, Google, AMD
SLIDE 101 101
Total: 180 ! @Sun.com: 47
SLIDE 102 102
25 Projects
SLIDE 103 103
Both Incremental Innovation
SLIDE 104 104
XRender Pipeline
SLIDE 105 105
And Disruptive Innovation
SLIDE 106 106
Dynamic language support
SLIDE 107 107
Larger Community
SLIDE 108 108
IcedTea
SLIDE 109 109
Jalimo
SLIDE 110 110
Cacao VM
SLIDE 111 111
Maxine VM
SLIDE 112 112
JNode OS
SLIDE 113 113
IKVM.NET
SLIDE 114 114
What about the language?
SLIDE 115 115
Size matters
SLIDE 116 116
Big changes harder then small ones
SLIDE 117 117
Project Coin
SLIDE 118 118
small language changes
SLIDE 119 119
Strings in switch
SLIDE 120 120
String s = ... switch(s) { case "foo": processFoo(s); break; }
SLIDE 121 121
Improved Type Inference for Generic Instance Creation
SLIDE 122 122
AKA: Diamond
SLIDE 123 123
// type less: Map<String, List<String>> map = new HashMap<>();
SLIDE 124 124
Language support for JSR 292
SLIDE 125 125
Object x = InvokeDynamic.getMeSomething(); MethodHandle mh = ...; mh.invoke(); int #"strange variable name" = 42; System.out.println(#"strange variable name"); // prints 42
SLIDE 126 126
… and more
SLIDE 127 127
http://openjdk.java.net/projects/coin
SLIDE 128 128
Not so small changes
SLIDE 129 129
Type Annotations
SLIDE 130 130
JSR 308
SLIDE 131 131
Checker framework
SLIDE 132 132
@NonNull
SLIDE 133 133
@Nullable
SLIDE 134 134
javac -processor NullnessChecker MyFile.java
SLIDE 135 135
@ReadOnly
SLIDE 136 136
http://openjdk.java.net/projects/type-annotations
SLIDE 137 137
JSR 294
SLIDE 138 138
Improved modularity support in the language
SLIDE 139 139
Independent
system
SLIDE 140 140
Explicit Dependencies + Versioning + Accessibility
SLIDE 141 141
module-info.java
SLIDE 142 142
src/org/openjdk/SomeTool.java src/module-info.java
SLIDE 143 143
module org.openjdk.SomeTool @ 1.0 { requires module SomeLib @ 1.2; requires module AnotherLib @ 2.1; requires module jdk-swing @ 7.0; class org.openjdk.SomeTool; }
SLIDE 144 144
understood by javac
SLIDE 145 145
understood by java
SLIDE 146 146
$CLASSPATH is dead
SLIDE 147 147
Jigsaw
SLIDE 148 148
modularity for the JDK
SLIDE 149 149
Size matters
SLIDE 150 150
well-defined subsets
SLIDE 151 151
Just-enough JDK
SLIDE 152 152
simple & static
SLIDE 153 153
low level
SLIDE 154 154
native packaging
SLIDE 155 155
jpkg
SLIDE 156 156
Now: deb
SLIDE 157 157
Soon: RPM SVR4 IPS
SLIDE 158 158
Add your format: jigsaw-dev@openjdk.dev.java.net
SLIDE 159 159
http://openjdk.java.net/projects/jigsaw/
SLIDE 160 160
JDK 7
SLIDE 161 161
8 milestones
SLIDE 162 162
M1 (finished)
SLIDE 163 163
Compressed OOPs
SLIDE 164 164
Garbage First Garbage Collector
SLIDE 165 165
M2 (finished)
SLIDE 166 166
NIO2
SLIDE 167 167
URLClassLoader.close()
SLIDE 168 168
M3 (finished)
SLIDE 169 169
InvokeDynamic
SLIDE 170 170
Stream Control Transmission Protocol
SLIDE 171 171
Sockets Direct Protocol
SLIDE 172 172
Unicode 5.1
SLIDE 173 173
ClassLoader Architecture Update
SLIDE 174 174
M4 (finished)
SLIDE 175 175
Forward-port 6u10 features
SLIDE 176 176
Type Annotations
SLIDE 177 177
M5 (ongoing)
SLIDE 178 178
Update the XML stack
SLIDE 179 179
Elliptic Curve Cryptography
SLIDE 180 180
Swing Updates
SLIDE 181 181
Concurrency & Collections Updates
SLIDE 182 182
Project Coin
SLIDE 183 183
http://openjdk.java.net/projects/jdk7/
SLIDE 184 184
Contribute
SLIDE 185 185
http://openjdk.java.net
SLIDE 186 186
Patches for JDK 7
SLIDE 187 187
http://bugs.openjdk.java.net
SLIDE 188 188
Stay up to date
SLIDE 189 189
http://planetjdk.org
SLIDE 190 190
Discuss development
SLIDE 191 191
discuss@openjdk.java.net
SLIDE 192 192
jdk7-dev@openjdk.java.net
SLIDE 193 193
Q & A dalibor.topic@sun.com