SlideShare a Scribd company logo
IzPack: because you and your end users
                have installation issues

                             Julien Ponge
+
From a hack made in a student dorm room...




                                    ... not mine!
...to an industry-backed project.
Unique installer   Multiple systems
v2




Download for your operating system



1:   java -Xmx256m -jar filename.jar
2:   chmod -R +x lib/ant/bin
3:   lib/ant/bin/ant -f setup.xml
4:   bin/asadmin start-domain domain
Demo

 One download
 Works everywhere
 Straightforward
IzPack?
25.000 downloads per month?
(...)
Files to package              Installer resources




               XML descriptor


                         Compiler, Ant or Maven


                   Installer Jar
Custom panels




Custom actions    Installer Jar



 3rd-party libs
variables
                Config files,
                 scripts, ...




Content-aware
 replacement
raw         pack200




deflate (gzip)    bzip2
Uti lity s cripts
GlassFish Installer
 — making-of —
Compiler




Installer JAR
Compiler




Installer JAR
Compiler




Installer JAR
Compiler




Installer JAR
<installation version="1.0">

  <info>
    <appname>Glassfish</appname>
    <appversion>v2 ur2 b04</appversion>
    <authors>
      <author email=""
               name="Julien Ponge (packager)"/>
      <author email=""
               name="Sun Microsystems and the GlassFish community"/>
    </authors>
    <url>http://glassfish.org/</url>
    <javaversion>1.5</javaversion>
    <requiresjdk>yes</requiresjdk>
  </info>

                                (...)
(...)
<panels>
    <panel   classname="HTMLInfoPanel" />
    <panel   classname="HTMLLicencePanel" />
    <panel   classname="TargetPanel" />
    <panel   classname="UserInputPanel" />
    <panel   classname="InstallPanel" />
    <panel   classname="ProcessPanel" />
    <panel   classname="ShortcutPanel" />
    <panel   classname="SimpleFinishPanel" />
</panels>

                      (...)
<pack name="GlassFish" required="yes">
  <description>GlassFish</description>

  <file src="launch-browser.sh" targetdir="$INSTALL_PATH/bin"
        condition="izpack.macinstall" />

  <fileset dir="linux" targetdir="$INSTALL_PATH"
           condition="izpack.linuxinstall">
    <% linux_specific.each do |file| %>
        <include name="<%= file %>"/>
    <% end %>
  </fileset>

  <executable targetfile="$INSTALL_PATH/lib/ant/bin/ant"
              stage="never" os="unix" />
  <parsable targetfile="$INSTALL_PATH/bin/launch-browser.sh"
            os="unix" />
</pack>
<pack name="GlassFish" required="yes">
  <description>GlassFish</description>

  <file src="launch-browser.sh" targetdir="$INSTALL_PATH/bin"
        condition="izpack.macinstall" />

  <fileset dir="linux" targetdir="$INSTALL_PATH"
           condition="izpack.linuxinstall">
    <% linux_specific.each do |file| %>
        <include name="<%= file %>"/>
    <% end %>
  </fileset>

  <executable targetfile="$INSTALL_PATH/lib/ant/bin/ant"
              stage="never" os="unix" />
  <parsable targetfile="$INSTALL_PATH/bin/launch-browser.sh"
            os="unix" />
</pack>
<pack name="GlassFish" required="yes">
  <description>GlassFish</description>

  <file src="launch-browser.sh" targetdir="$INSTALL_PATH/bin"
        condition="izpack.macinstall" />

  <fileset dir="linux" targetdir="$INSTALL_PATH"
           condition="izpack.linuxinstall">
    <% linux_specific.each do |file| %>
        <include name="<%= file %>"/>
    <% end %>
  </fileset>                             Ant-style:
                                            **/*
  <executable targetfile="$INSTALL_PATH/lib/ant/bin/ant"
                                            dir/*.class
              stage="never" os="unix" />    **/*.jar
  <parsable targetfile="$INSTALL_PATH/bin/launch-browser.sh"
                                            lib/**/*.jar
            os="unix" />
</pack>
<pack name="GlassFish" required="yes">
  <description>GlassFish</description>

  <file src="launch-browser.sh" targetdir="$INSTALL_PATH/bin"
        condition="izpack.macinstall" />

  <fileset dir="linux" targetdir="$INSTALL_PATH"
           condition="izpack.linuxinstall">
    <% linux_specific.each do |file| %>
        <include name="<%= file %>"/>
    <% end %>
  </fileset>

  <executable targetfile="$INSTALL_PATH/lib/ant/bin/ant"
              stage="never" os="unix" />
  <parsable targetfile="$INSTALL_PATH/bin/launch-browser.sh"
            os="unix" />
</pack>
<guiprefs height="600" resizable="yes" width="800">
  <modifier key="allXGap" value="5"/>
  <modifier key="allYGap" value="5"/>
  <modifier key="paragraphYGap" value="15"/>
  <modifier key="useHeadingPanel" value="yes"/>
  <modifier key="headingLineCount" value="1"/>
  <modifier key="headingFontSize" value="2"/>
  <modifier key="headingBackgroundColor" value="0x00ffffff"/>
  <modifier key="headingPanelCounter" value="text"/>
  <modifier key="headingPanelCounterPos" value="inHeading"/>
</guiprefs>
<conditions>
  <condition
      type="variable"
      id="start.glassfish">
    <name>gf_start_domain</name>
      <value>true</value>
  </condition>
</conditions>
Demo
How about packaging
     systems?
(...)




Packages vs Installers
On Windows ?
On Mac OS X ?
On *nix ?
Initial installation

Bootstrap IPS + updates


    Uninstallation




  Updates + Add-ons
The next IzPack
The hype effect

     Patterns         TDD,            JSR xyz
                      BDD


...your application code will eventually look bad!

       Best                          Scripting
                    IoC & DI
     practices
Kudos to:
                  Anthonin Bonnefoy
      0-b eta     David Duponchel
 5.
                  Rene Krell



  PicoContainer

+ hamcrest
+ fest-swing                          JUnit
Developers

  SCM




             CVS then Subversion
Developers

  SCM
Try it today!
                4.3.3
                4.3.4-RC1
                5.0.0-beta
Opensource Projet
   Aftermath
F/OSS... why?
                    nothing’s free!


Fun   Skills   Advertise




Strategic market shares




Direct revenue streams
Project type       “Main” models

                   Consulting
Framework          Training
and libraries      Support
                   Dual licensing

                   Support plans
Mission-critical
                   Consulting
infrastructure
                   Management tools
servers
                   Extensions

                   Open Core
Products           Extensions
                   Customizations
Start         Easy
                    Solo work

     Users!


     Patches!


Community support

                    Hard to reach
  Mature project
                    Manager work
add this!



                           support that!



 it is not ready for the
enterprise unless you...



                           I expected it to do this
                                but it doesn’t!
<
Words       Code
Upstream




Monster patch (or raw files!)
“Given enough eyeballs,
 all bugs are shallow.”

         — Linus’s Law
Julien Ponge Q&A
                  @jponge   @izpack
   julien.ponge@gmail.com   http://izpack.org/
http://julien.ponge.info/

More Related Content

Similar to IzPack at LyonJUG'11

From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012
Carlos Sanchez
 

Similar to IzPack at LyonJUG'11 (20)

Iz Pack
Iz PackIz Pack
Iz Pack
 
Phing
PhingPhing
Phing
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
Tools and Process for Streamlining Mac Deployment
Tools and Process for Streamlining Mac DeploymentTools and Process for Streamlining Mac Deployment
Tools and Process for Streamlining Mac Deployment
 
SenchaCon 2016: Building Enterprise Ext JS Apps with Mavenized Sencha Cmd - F...
SenchaCon 2016: Building Enterprise Ext JS Apps with Mavenized Sencha Cmd - F...SenchaCon 2016: Building Enterprise Ext JS Apps with Mavenized Sencha Cmd - F...
SenchaCon 2016: Building Enterprise Ext JS Apps with Mavenized Sencha Cmd - F...
 
"I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more."I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more.
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
Maven
MavenMaven
Maven
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous Integration
 
Write php deploy everywhere tek11
Write php deploy everywhere   tek11Write php deploy everywhere   tek11
Write php deploy everywhere tek11
 
Dexterity in 15 minutes or less
Dexterity in 15 minutes or lessDexterity in 15 minutes or less
Dexterity in 15 minutes or less
 
Heroku pycon
Heroku pyconHeroku pycon
Heroku pycon
 
What makes me "Grunt"?
What makes me "Grunt"? What makes me "Grunt"?
What makes me "Grunt"?
 
Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013
 
Introduction to Maven
Introduction to MavenIntroduction to Maven
Introduction to Maven
 
From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012
 
Liferay maven sdk
Liferay maven sdkLiferay maven sdk
Liferay maven sdk
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
Universal Userland
Universal UserlandUniversal Userland
Universal Userland
 

More from julien.ponge (10)

AlpesJUG - Communautés opensource, stratégies et écueils
AlpesJUG - Communautés opensource, stratégies et écueilsAlpesJUG - Communautés opensource, stratégies et écueils
AlpesJUG - Communautés opensource, stratégies et écueils
 
Java 7 LavaJUG
Java 7 LavaJUGJava 7 LavaJUG
Java 7 LavaJUG
 
Java 7 at SoftShake 2011
Java 7 at SoftShake 2011Java 7 at SoftShake 2011
Java 7 at SoftShake 2011
 
Java 7 JUG Summer Camp
Java 7 JUG Summer CampJava 7 JUG Summer Camp
Java 7 JUG Summer Camp
 
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
 
FOSS - PoitouJUG
FOSS - PoitouJUGFOSS - PoitouJUG
FOSS - PoitouJUG
 
IzPack at Devoxx 2010
IzPack at Devoxx 2010IzPack at Devoxx 2010
IzPack at Devoxx 2010
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydney
 
PhD Defense
PhD DefensePhD Defense
PhD Defense
 
IzPack Glassfish Lightning Talks 2008
IzPack Glassfish Lightning Talks 2008IzPack Glassfish Lightning Talks 2008
IzPack Glassfish Lightning Talks 2008
 

Recently uploaded

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 

Recently uploaded (20)

UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 

IzPack at LyonJUG'11

  • 1. IzPack: because you and your end users have installation issues Julien Ponge
  • 2. +
  • 3. From a hack made in a student dorm room... ... not mine!
  • 5.
  • 6. Unique installer Multiple systems
  • 7. v2 Download for your operating system 1: java -Xmx256m -jar filename.jar 2: chmod -R +x lib/ant/bin 3: lib/ant/bin/ant -f setup.xml 4: bin/asadmin start-domain domain
  • 8. Demo One download Works everywhere Straightforward
  • 11. (...)
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18. Files to package Installer resources XML descriptor Compiler, Ant or Maven Installer Jar
  • 19. Custom panels Custom actions Installer Jar 3rd-party libs
  • 20. variables Config files, scripts, ... Content-aware replacement
  • 21.
  • 22.
  • 23.
  • 24. raw pack200 deflate (gzip) bzip2
  • 25. Uti lity s cripts
  • 26. GlassFish Installer — making-of —
  • 31. <installation version="1.0"> <info> <appname>Glassfish</appname> <appversion>v2 ur2 b04</appversion> <authors> <author email="" name="Julien Ponge (packager)"/> <author email="" name="Sun Microsystems and the GlassFish community"/> </authors> <url>http://glassfish.org/</url> <javaversion>1.5</javaversion> <requiresjdk>yes</requiresjdk> </info> (...)
  • 32. (...) <panels> <panel classname="HTMLInfoPanel" /> <panel classname="HTMLLicencePanel" /> <panel classname="TargetPanel" /> <panel classname="UserInputPanel" /> <panel classname="InstallPanel" /> <panel classname="ProcessPanel" /> <panel classname="ShortcutPanel" /> <panel classname="SimpleFinishPanel" /> </panels> (...)
  • 33. <pack name="GlassFish" required="yes"> <description>GlassFish</description> <file src="launch-browser.sh" targetdir="$INSTALL_PATH/bin" condition="izpack.macinstall" /> <fileset dir="linux" targetdir="$INSTALL_PATH" condition="izpack.linuxinstall"> <% linux_specific.each do |file| %> <include name="<%= file %>"/> <% end %> </fileset> <executable targetfile="$INSTALL_PATH/lib/ant/bin/ant" stage="never" os="unix" /> <parsable targetfile="$INSTALL_PATH/bin/launch-browser.sh" os="unix" /> </pack>
  • 34. <pack name="GlassFish" required="yes"> <description>GlassFish</description> <file src="launch-browser.sh" targetdir="$INSTALL_PATH/bin" condition="izpack.macinstall" /> <fileset dir="linux" targetdir="$INSTALL_PATH" condition="izpack.linuxinstall"> <% linux_specific.each do |file| %> <include name="<%= file %>"/> <% end %> </fileset> <executable targetfile="$INSTALL_PATH/lib/ant/bin/ant" stage="never" os="unix" /> <parsable targetfile="$INSTALL_PATH/bin/launch-browser.sh" os="unix" /> </pack>
  • 35. <pack name="GlassFish" required="yes"> <description>GlassFish</description> <file src="launch-browser.sh" targetdir="$INSTALL_PATH/bin" condition="izpack.macinstall" /> <fileset dir="linux" targetdir="$INSTALL_PATH" condition="izpack.linuxinstall"> <% linux_specific.each do |file| %> <include name="<%= file %>"/> <% end %> </fileset> Ant-style: **/* <executable targetfile="$INSTALL_PATH/lib/ant/bin/ant" dir/*.class stage="never" os="unix" /> **/*.jar <parsable targetfile="$INSTALL_PATH/bin/launch-browser.sh" lib/**/*.jar os="unix" /> </pack>
  • 36. <pack name="GlassFish" required="yes"> <description>GlassFish</description> <file src="launch-browser.sh" targetdir="$INSTALL_PATH/bin" condition="izpack.macinstall" /> <fileset dir="linux" targetdir="$INSTALL_PATH" condition="izpack.linuxinstall"> <% linux_specific.each do |file| %> <include name="<%= file %>"/> <% end %> </fileset> <executable targetfile="$INSTALL_PATH/lib/ant/bin/ant" stage="never" os="unix" /> <parsable targetfile="$INSTALL_PATH/bin/launch-browser.sh" os="unix" /> </pack>
  • 37. <guiprefs height="600" resizable="yes" width="800"> <modifier key="allXGap" value="5"/> <modifier key="allYGap" value="5"/> <modifier key="paragraphYGap" value="15"/> <modifier key="useHeadingPanel" value="yes"/> <modifier key="headingLineCount" value="1"/> <modifier key="headingFontSize" value="2"/> <modifier key="headingBackgroundColor" value="0x00ffffff"/> <modifier key="headingPanelCounter" value="text"/> <modifier key="headingPanelCounterPos" value="inHeading"/> </guiprefs>
  • 38. <conditions> <condition type="variable" id="start.glassfish"> <name>gf_start_domain</name> <value>true</value> </condition> </conditions>
  • 39. Demo
  • 43. On Mac OS X ?
  • 45.
  • 46. Initial installation Bootstrap IPS + updates Uninstallation Updates + Add-ons
  • 47.
  • 49. The hype effect Patterns TDD, JSR xyz BDD ...your application code will eventually look bad! Best Scripting IoC & DI practices
  • 50. Kudos to: Anthonin Bonnefoy 0-b eta David Duponchel 5. Rene Krell PicoContainer + hamcrest + fest-swing JUnit
  • 51. Developers SCM CVS then Subversion
  • 53. Try it today! 4.3.3 4.3.4-RC1 5.0.0-beta
  • 54. Opensource Projet Aftermath
  • 55. F/OSS... why? nothing’s free! Fun Skills Advertise Strategic market shares Direct revenue streams
  • 56. Project type “Main” models Consulting Framework Training and libraries Support Dual licensing Support plans Mission-critical Consulting infrastructure Management tools servers Extensions Open Core Products Extensions Customizations
  • 57.
  • 58.
  • 59. Start Easy Solo work Users! Patches! Community support Hard to reach Mature project Manager work
  • 60. add this! support that! it is not ready for the enterprise unless you... I expected it to do this but it doesn’t!
  • 61.
  • 62. < Words Code
  • 64.
  • 65. “Given enough eyeballs, all bugs are shallow.” — Linus’s Law
  • 66. Julien Ponge Q&A @jponge @izpack julien.ponge@gmail.com http://izpack.org/ http://julien.ponge.info/