SlideShare a Scribd company logo
Eclipse, OSGi and API Tooling




                                                                   Chris Aniszczyk (EclipseSource)
                                                                            zx@eclipsesource.com
                                                                           http://eclipsesource.com




1
1       Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Who am I?
    • Chris Aniszczyk
         Senior Software Engineer at EclipseSource
         Plug-in Development Environment (PDE) Co-Lead
         Been doing OSGi before it was en vogue
         Committer Representative on Eclipse’s Board of Directors
         Co-author Eclipse RCP Book 2nd Edition
         I dabble with many things at Eclipse.org
    • My blog
       http://aniszczyk.org
    • Follow me on Twitter
       http://twitter.com/caniszczyk


2
2          Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Overview
    • The need for tooling
    • Tooling features
    • Tooling in action!
    • Future work
    • Summary
    • Q&A




3
2        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
The need for tooling

    Remember Kirk’s gigantic Modularity diagram?




4
3    Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Define API
    • APIs are published contracts
       Producers specify the contracts
           Honor contracts release after release
           Evolve the contracts for enhancements and fix problems
       Consumers adhere to the contracts
           Implement the contracts per specification
           Use provided implementations per contract specifications




5
4        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
The Ideal Release Equation

     Developer: Compatibility (producer)

                                                                 +

                     Client: Honor API contract (consumer)

                                                                 =

                                              Free migration!!!




6
5       Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
The Ideal Never Happens...

                   Developer: (features + deprecation +
                  Optional extensions to existing features +
                            Replacement API +
                              Provisional API)

                                                                 +

                            Client: Illegal internal references

                                                                 =

                                            Migration at a cost

7
6       Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
What have we done as developers?
    • We use Javadoc™ to document contracts
        This class is not intended to be instantiated or subclassed by
         clients.
        Has no effect if not read
        Inconsistent wording, placement, and use
    • Use component.xml to specify APIs (at Eclipse.org)
        Out of date, not maintained
        Why? Because there’s no tooling and it’s separate from the code
    • We use package names to categorize as public/internal, but all
      packages are exported
    • We use OSGi package exports (x-internal and x-friends)
      to limit visibility, but does not prevent access to internal types
    • We use Eclipse’s access rules to discourage use, but this can
      be turned off

8
7         Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
More things we do…
    • Manually examine API changes or use some external
      tool before a release (aka the API Police)
       Changes between releases can be significant
       Validation is time consuming and error prone
       Lost development time (due to checking and bugs found)




9
8       Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
And we still fail...




10
 9        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
And we still fail...
     • At Eclipse, we have had issues with projects
       unintentionally breaking API...
     • Outside of Eclipse, it highly varies...
        “Commons collections 3.0 is binary compatible with version
         2.1 and 2.0 except for certain methods on one class. As the
         release was a major version, this is permitted, however it
         was unintentional and an error... the chosen solution is to
         provide a work around by releasing v2.1.1 and v3.1.”


     • Surely you’ve come across API issues, right?



11
10        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Disclaimer
     • This presentation isn’t about API design

     • API design is still your problem
         Designing quality APIs is tough
         Ensuring consistent behavior
         Evolving APIs is tricky




     • But there are things that tooling can help with…

12
11        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Good fences...




     • Check out some of Joshua Bloch’s presentations
       around API (How to Design API and Why it Matters)
       and some of the EclipseCon API design
       presentations...
13
12        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Tooling Features




14
13   Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Tooling to the Rescue!
     • Reports
           Illegal API use
           Binary incompatibility relative to a baseline
           Incorrect bundle version numbers
           Missing or malformed @since tags
           Leakage of non-APIs types inside APIs
           Execution Environment validation
     • Tightly integrated toolset in the Eclipse SDK
         Currently limited to Plug-in projects/OSGi bundles
         Runs as a builder (auto-build, incremental and full builds)
         Immediate feedback as you develop and use APIs


15
14          Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Specifying API Contracts
     • Use Javadoc tags
         E.g. @noimplement, @noextend, @noreference, @noinstantiate


     • Benefits
         Contracts live with the code for producers and consumers
         Content assist helps developers
         Available for projects that are not using 1.5 annotations
         Restrictions appear in published Javadoc APIs in a standard
          way
         Tools can process tags




16
15          Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Tooling Javadoc Tags




17
16       Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Example of Published API




18
17       Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Usage
     • Once the APIs are specified, the user needs to make
       sure that he/she is using them appropriately.
     • API usage is flagging any kind of illegal usage of API:
       reference to an API that is not supposed to be
       referenced, implementation of an interface that is not
       supposed to be implemented, ….
     • A consequence of wrong API usage is a potential
       binary incompatible change error.




19
18        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Why API Usage Scans?
     API producers can see what internals are being used
     •   Inform clients how to use proper API
     •   Determine what new API needs to be added
     •   Know what clients will be broken
     •   Avoid breaking internals until clients have migrated




20
19         Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Validating Binary Compatibility
     • Evolving APIs such that they are backwards
       compatible with existing binaries
        http://wiki.eclipse.org/index.php/Evolving_Java-based_APIs
        It is easy to get it wrong
        Now the tooling takes care of this


     • The user simply specifies an API baseline
        Generally this means pointing to the previous release (N – 1)




21
20        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Comparisons
     • What’s changed between versions?




22
21       Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
System Library Validation
     • Validate system library use based on a bundle’s
       required execution environment (BREE)
        if a bundle claims to run on J2SE-1.4, access to members in
         J2SE-1.5 and higher are flagged as illegal
        See OSGi Specification on Execution Environments




23
22        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Migration Assistance
     • “What will be broken if I move to a new version?”
     • “Will my plug-in still run on an older target version?”
     • We simply re-resolve the references against X, with
       the code in X+1
     • Of course you can get the same information if you
       compile, but that requires more setup...




24
23        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Bundle version number management
     • http://wiki.eclipse.org/index.php/Version_Numbering
     • The tooling takes care of letting the user know when
       the minor or major version of a bundle should be
       changed according to rules described in the
       document:
         A new API that is not a breaking change requires the minor
          version to be incremented
         A new API that is a breaking change requires the major
          version to be incremented
     • No support for the micro version yet...
         Technically speaking, this version should be changed as
          soon as any modification is made in the source code:
          comment change, method body change,…
25
24        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
OSGi Versioning 101
     • major.minor.micro.qualifier
          major - An incompatible update; breaking API
          minor - A backward compatible update; API stable
          micro - A bug fix
          qualifier - build date; lexicographic


     • Versions should encode compatibility at the bundle
       and package level... aid in evolution...

     • They aren’t a marketing number!


26
25          Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Tooling in Action (example of bug 191231/191232)




27
25         Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2008 EclipseSource
API Tooling in Action (API Usage Report)




28
26        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Tooling in Action (System Library Validation)




29
29         Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Tooling in Action (API Comparison)




30
30        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Tooling Parts




31
31   Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Profile and API Components
     • These are the two major pieces used by the API
       tooling tools to make diagnosis on the code
     • An API profile can be seen like a PDE target platform
     • An API profile is a collection of API components
     • It is initialized using an Eclipse SDK installation
       plugins directory (or some other directory of bundles)
     • Inside the IDE, a profile corresponding to the
       workbench contents is automatically created




32
32        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Description
     • This contains the specific restrictions for all the API
       types of an API component
     • It is kept up-to-date inside the workbench by using
       resource listeners
     • It is exported inside the binary bundles or generated at
       build time using an ant task.




33
33        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Filtering of API Problems
     • Each component can define a problem filter
     • The filtering can be used to remove from reports
       known breakages.
     • For example, an API breakage has been approved by
       the PMC and you don’t want to get it reported for each
       build.
     • The problem filter is also part of the binary plug-in




34
34        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Two aspects: IDE and build process
     • Each feature is available from within the IDE or inside
       a headless build process via Ant tasks
     • The IDE support is required to help the Eclipse
       developer while the code is written
     • The build process support is required to provide
       feedback during the Eclipse build. This also allows
       other projects to use it inside their builds.




35
35        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Build support
     • Addition of new ant tasks:
         Generation of .api_description file
         Comparison of SDK drops: binary compatibility, api usage
          reports
     • Integration inside the Eclipse builds (headless mode)
     • Integration inside ant build (no Eclipse running)




36
22        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Error/Warning Preferences




37
37       Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Setup Wizard




38
38       Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Profile (Baseline) Preferences




39
39       Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Profile (Baseline) Wizard




40
40       Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Future work




41
41   Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
To be done...
     • Handling of package level versioning
     • Support extended to support more than just bundles
         Pure Java™ projects
         Plug-in extension points
     • Improve integration with Eclipse rel-eng build reporting
     • Determine compatible version range of required bundles

     • And what you might suggest...




42
42         Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Summary




43
43   Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
API Tooling Summary
     • Help you to define your API restrictions
     • Keep a consistent and standard presentation of API
       restrictions
     • Detect binary breakage between a baseline and the
       current version
     • Detect wrong API usage
     • Detect wrong @since tags and inconsistent bundle
       versioning
     • Detect Execution Environment problems...
     • Supports more than just Eclipse (hi OSGi folks)!

44
44        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Links
     • Wiki
         http://wiki.eclipse.org/Api_Tooling

     • Bugzilla
         https://bugs.eclipse.org/bugs/enter_bug.cgi?product=PDE


     • Get Involved
        https://dev.eclipse.org/mailman/listinfo/pde-dev




45
45        Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Q & A

46
46   Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
Ad

Recommended

PPT
Eclipse Plug-in Develompent Tips And Tricks
Chris Aniszczyk
 
PPTX
PDE builds or Maven
Eclipse Day India
 
PPTX
Building Eclipse Plugins
Liran Zelkha
 
ODP
PDE Good Practices
Ankur Sharma
 
PDF
Eclipse plug in development
Martin Toshev
 
KEY
L0016 - The Structure of an Eclipse Plug-in
Tonny Madsen
 
PDF
P2 Introduction
irbull
 
PPTX
Plugin architecture (Extensible Application Architecture)
Chinmoy Mohanty
 
PDF
Eclipse Che - A Revolutionary IDE for Distributed & Mainframe Development
DevOps.com
 
PDF
Building an Eclipse plugin to recommend changes to developers
kim.mens
 
PPTX
Cloud Collaboration with Eclipse Che
Martin (高馬丁) Skarsaune
 
PPTX
Tizen Native Application Development with C/C++
Gilang Mentari Hamidy
 
PDF
Samsung Indonesia: Tizen Native App
Ryo Jin
 
PDF
Building GPE: What We Learned
rajeevdayal
 
PDF
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Ajeet Singh Raina
 
PDF
Getting Started with IntelliJ IDEA as an Eclipse User
ZeroTurnaround
 
KEY
Tycho - Building plug-ins with Maven
Pascal Rapicault
 
PPTX
NCDevCon 2017 - Cross Platform Mobile Apps
John M. Wargo
 
PDF
Working effectively with OpenShift
Shekhar Gulati
 
PDF
.NET Online TechTalk “Azure Cloud for DEV”
GlobalLogic Ukraine
 
PDF
Developing Great Apps with Apache Cordova
Shekhar Gulati
 
PPTX
Discovery the p2 API (updated to Indigo)
Pascal Rapicault
 
PDF
MicroProfile: Optimizing Java EE for a Microservices Architecture
jclingan
 
PDF
Building Rich Applications with Appcelerator
Matt Raible
 
PDF
Running Spring Boot Applications as GraalVM Native Images
VMware Tanzu
 
PDF
A Reference Architecture to Enable Visibility and Traceability across the Ent...
CollabNet
 
PPTX
Cross-platform Mobile Development on Open Source
All Things Open
 
PPTX
JavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
Jorge Hidalgo
 
ODP
Eclipse Extensions Vs OSGI Services Tikal@ EclipseDemoCamps Tel Aviv
guestb69b980e
 
PDF
OSGi Technology, Eclipse and Convergence - Jeff McAffer, IBM
mfrancis
 

More Related Content

What's hot (20)

PDF
Eclipse Che - A Revolutionary IDE for Distributed & Mainframe Development
DevOps.com
 
PDF
Building an Eclipse plugin to recommend changes to developers
kim.mens
 
PPTX
Cloud Collaboration with Eclipse Che
Martin (高馬丁) Skarsaune
 
PPTX
Tizen Native Application Development with C/C++
Gilang Mentari Hamidy
 
PDF
Samsung Indonesia: Tizen Native App
Ryo Jin
 
PDF
Building GPE: What We Learned
rajeevdayal
 
PDF
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Ajeet Singh Raina
 
PDF
Getting Started with IntelliJ IDEA as an Eclipse User
ZeroTurnaround
 
KEY
Tycho - Building plug-ins with Maven
Pascal Rapicault
 
PPTX
NCDevCon 2017 - Cross Platform Mobile Apps
John M. Wargo
 
PDF
Working effectively with OpenShift
Shekhar Gulati
 
PDF
.NET Online TechTalk “Azure Cloud for DEV”
GlobalLogic Ukraine
 
PDF
Developing Great Apps with Apache Cordova
Shekhar Gulati
 
PPTX
Discovery the p2 API (updated to Indigo)
Pascal Rapicault
 
PDF
MicroProfile: Optimizing Java EE for a Microservices Architecture
jclingan
 
PDF
Building Rich Applications with Appcelerator
Matt Raible
 
PDF
Running Spring Boot Applications as GraalVM Native Images
VMware Tanzu
 
PDF
A Reference Architecture to Enable Visibility and Traceability across the Ent...
CollabNet
 
PPTX
Cross-platform Mobile Development on Open Source
All Things Open
 
PPTX
JavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
Jorge Hidalgo
 
Eclipse Che - A Revolutionary IDE for Distributed & Mainframe Development
DevOps.com
 
Building an Eclipse plugin to recommend changes to developers
kim.mens
 
Cloud Collaboration with Eclipse Che
Martin (高馬丁) Skarsaune
 
Tizen Native Application Development with C/C++
Gilang Mentari Hamidy
 
Samsung Indonesia: Tizen Native App
Ryo Jin
 
Building GPE: What We Learned
rajeevdayal
 
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Ajeet Singh Raina
 
Getting Started with IntelliJ IDEA as an Eclipse User
ZeroTurnaround
 
Tycho - Building plug-ins with Maven
Pascal Rapicault
 
NCDevCon 2017 - Cross Platform Mobile Apps
John M. Wargo
 
Working effectively with OpenShift
Shekhar Gulati
 
.NET Online TechTalk “Azure Cloud for DEV”
GlobalLogic Ukraine
 
Developing Great Apps with Apache Cordova
Shekhar Gulati
 
Discovery the p2 API (updated to Indigo)
Pascal Rapicault
 
MicroProfile: Optimizing Java EE for a Microservices Architecture
jclingan
 
Building Rich Applications with Appcelerator
Matt Raible
 
Running Spring Boot Applications as GraalVM Native Images
VMware Tanzu
 
A Reference Architecture to Enable Visibility and Traceability across the Ent...
CollabNet
 
Cross-platform Mobile Development on Open Source
All Things Open
 
JavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
Jorge Hidalgo
 

Viewers also liked (10)

ODP
Eclipse Extensions Vs OSGI Services Tikal@ EclipseDemoCamps Tel Aviv
guestb69b980e
 
PDF
OSGi Technology, Eclipse and Convergence - Jeff McAffer, IBM
mfrancis
 
PPTX
Intro to OSGi and Eclipse Virgo
Gordon Dickens
 
PPTX
RESTful Web Services
Gordon Dickens
 
PPTX
Eclipse e4 Tutorial - EclipseCon 2010
Lars Vogel
 
KEY
OSGi For Eclipse Developers
Chris Aniszczyk
 
PDF
OSGi and Eclipse RCP
Eric Jain
 
PDF
Mastering your Eclipse IDE - Tips, Tricks, Java 8 tooling & More!
Noopur Gupta
 
PDF
The Eclipse IDE - The Force Awakens (Devoxx France 2016)
mikaelbarbero
 
PDF
Visual Design with Data
Seth Familian
 
Eclipse Extensions Vs OSGI Services Tikal@ EclipseDemoCamps Tel Aviv
guestb69b980e
 
OSGi Technology, Eclipse and Convergence - Jeff McAffer, IBM
mfrancis
 
Intro to OSGi and Eclipse Virgo
Gordon Dickens
 
RESTful Web Services
Gordon Dickens
 
Eclipse e4 Tutorial - EclipseCon 2010
Lars Vogel
 
OSGi For Eclipse Developers
Chris Aniszczyk
 
OSGi and Eclipse RCP
Eric Jain
 
Mastering your Eclipse IDE - Tips, Tricks, Java 8 tooling & More!
Noopur Gupta
 
The Eclipse IDE - The Force Awakens (Devoxx France 2016)
mikaelbarbero
 
Visual Design with Data
Seth Familian
 
Ad

Similar to OSGi, Eclipse and API Tooling (20)

PPT
API Tooling in Eclipse
Chris Aniszczyk
 
PPT
Api tools overview
Olivier Thomann
 
KEY
Introduction to EclipseRT (JAX 2010)
Chris Aniszczyk
 
PPTX
OSGi Versioning And Testing
pvanderlei
 
PPT
OSGi Versioning & Testing
Chris Aniszczyk
 
PDF
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
mfrancis
 
ODP
OSGi Sticker Shock Eclipse Con 2010
ericjohnson
 
PDF
JavaOne 2012, OSGi for the Earthlings: Meet Eclipse Libra
Murat Yener
 
PDF
Who Took The Cookie From The Cookie Jar?
Olivier Thomann
 
PDF
Using OSGi technology in Eclipse - BJ Hargrave, IBM, for Jeff McAffer, IBM
mfrancis
 
PDF
Eclipse_Building_Blocks
Rahul Shukla
 
PDF
Moved to https://slidr.io/azzazzel/osgi-for-outsiders
Milen Dyankov
 
PDF
OSGi for outsiders - Milen Dyankov
mfrancis
 
PPT
Eclipse and API tooling
Eclipse Day India
 
PPTX
EclipseCON2012 - Enterprise OSGi for Earthlings: Meet Eclipse Libra
Naci Dai
 
PDF
Creating Large Scale Software Platforms with OSGi and an Extension Point Mode...
Nuxeo
 
PDF
Best Practices for (Enterprise) OSGi applications - Tim Ward
mfrancis
 
PDF
Many Bundles of Things - M Rulli
mfrancis
 
PDF
OSGi at eBay: JavaOne 2010
Sangjin Lee
 
PDF
Benefits of OSGi in Practise
David Bosschaert
 
API Tooling in Eclipse
Chris Aniszczyk
 
Api tools overview
Olivier Thomann
 
Introduction to EclipseRT (JAX 2010)
Chris Aniszczyk
 
OSGi Versioning And Testing
pvanderlei
 
OSGi Versioning & Testing
Chris Aniszczyk
 
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
mfrancis
 
OSGi Sticker Shock Eclipse Con 2010
ericjohnson
 
JavaOne 2012, OSGi for the Earthlings: Meet Eclipse Libra
Murat Yener
 
Who Took The Cookie From The Cookie Jar?
Olivier Thomann
 
Using OSGi technology in Eclipse - BJ Hargrave, IBM, for Jeff McAffer, IBM
mfrancis
 
Eclipse_Building_Blocks
Rahul Shukla
 
Moved to https://slidr.io/azzazzel/osgi-for-outsiders
Milen Dyankov
 
OSGi for outsiders - Milen Dyankov
mfrancis
 
Eclipse and API tooling
Eclipse Day India
 
EclipseCON2012 - Enterprise OSGi for Earthlings: Meet Eclipse Libra
Naci Dai
 
Creating Large Scale Software Platforms with OSGi and an Extension Point Mode...
Nuxeo
 
Best Practices for (Enterprise) OSGi applications - Tim Ward
mfrancis
 
Many Bundles of Things - M Rulli
mfrancis
 
OSGi at eBay: JavaOne 2010
Sangjin Lee
 
Benefits of OSGi in Practise
David Bosschaert
 
Ad

More from Chris Aniszczyk (20)

PDF
Bringing an open source project to the Linux Foundation
Chris Aniszczyk
 
PDF
Starting an Open Source Program Office (OSPO)
Chris Aniszczyk
 
PDF
Open Container Initiative Update
Chris Aniszczyk
 
PDF
Cloud Native Landscape (CNCF and OCI)
Chris Aniszczyk
 
PDF
Rise of Open Source Programs
Chris Aniszczyk
 
PDF
The Open Container Initiative (OCI) at 12 months
Chris Aniszczyk
 
PDF
Open Source Lessons from the TODO Group
Chris Aniszczyk
 
PDF
Getting Students Involved in Open Source
Chris Aniszczyk
 
PDF
Life at Twitter + Career Advice for Students
Chris Aniszczyk
 
PDF
Creating an Open Source Office: Lessons from Twitter
Chris Aniszczyk
 
PDF
The Open Source... Behind the Tweets
Chris Aniszczyk
 
PDF
Apache Mesos at Twitter (Texas LinuxFest 2014)
Chris Aniszczyk
 
PDF
Evolution of The Twitter Stack
Chris Aniszczyk
 
PDF
Open Source Craft at Twitter
Chris Aniszczyk
 
KEY
Open Source Compliance at Twitter
Chris Aniszczyk
 
PDF
Effective Development With Eclipse Mylyn, Git, Gerrit and Hudson
Chris Aniszczyk
 
PPT
Effective Git with Eclipse
Chris Aniszczyk
 
ODP
Evolution of Version Control In Open Source
Chris Aniszczyk
 
ODP
ESE 2010: Using Git in Eclipse
Chris Aniszczyk
 
KEY
SWTBot Tutorial
Chris Aniszczyk
 
Bringing an open source project to the Linux Foundation
Chris Aniszczyk
 
Starting an Open Source Program Office (OSPO)
Chris Aniszczyk
 
Open Container Initiative Update
Chris Aniszczyk
 
Cloud Native Landscape (CNCF and OCI)
Chris Aniszczyk
 
Rise of Open Source Programs
Chris Aniszczyk
 
The Open Container Initiative (OCI) at 12 months
Chris Aniszczyk
 
Open Source Lessons from the TODO Group
Chris Aniszczyk
 
Getting Students Involved in Open Source
Chris Aniszczyk
 
Life at Twitter + Career Advice for Students
Chris Aniszczyk
 
Creating an Open Source Office: Lessons from Twitter
Chris Aniszczyk
 
The Open Source... Behind the Tweets
Chris Aniszczyk
 
Apache Mesos at Twitter (Texas LinuxFest 2014)
Chris Aniszczyk
 
Evolution of The Twitter Stack
Chris Aniszczyk
 
Open Source Craft at Twitter
Chris Aniszczyk
 
Open Source Compliance at Twitter
Chris Aniszczyk
 
Effective Development With Eclipse Mylyn, Git, Gerrit and Hudson
Chris Aniszczyk
 
Effective Git with Eclipse
Chris Aniszczyk
 
Evolution of Version Control In Open Source
Chris Aniszczyk
 
ESE 2010: Using Git in Eclipse
Chris Aniszczyk
 
SWTBot Tutorial
Chris Aniszczyk
 

Recently uploaded (20)

PDF
The Growing Value and Application of FME & GenAI
Safe Software
 
PDF
From Manual to Auto Searching- FME in the Driver's Seat
Safe Software
 
PPTX
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
PDF
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
PPTX
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 
PDF
Cyber Defense Matrix Workshop - RSA Conference
Priyanka Aash
 
PPTX
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
PDF
cnc-processing-centers-centateq-p-110-en.pdf
AmirStern2
 
PDF
AI vs Human Writing: Can You Tell the Difference?
Shashi Sathyanarayana, Ph.D
 
PPTX
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Josef Weingand
 
PDF
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
caoyixuan2019
 
PDF
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
Earley Information Science
 
PDF
Connecting Data and Intelligence: The Role of FME in Machine Learning
Safe Software
 
PDF
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
PDF
Techniques for Automatic Device Identification and Network Assignment.pdf
Priyanka Aash
 
PPTX
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
Fwdays
 
PDF
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Priyanka Aash
 
PDF
Mastering AI Workflows with FME by Mark Döring
Safe Software
 
PDF
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
PDF
2025_06_18 - OpenMetadata Community Meeting.pdf
OpenMetadata
 
The Growing Value and Application of FME & GenAI
Safe Software
 
From Manual to Auto Searching- FME in the Driver's Seat
Safe Software
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 
Cyber Defense Matrix Workshop - RSA Conference
Priyanka Aash
 
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
cnc-processing-centers-centateq-p-110-en.pdf
AmirStern2
 
AI vs Human Writing: Can You Tell the Difference?
Shashi Sathyanarayana, Ph.D
 
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Josef Weingand
 
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
caoyixuan2019
 
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
Earley Information Science
 
Connecting Data and Intelligence: The Role of FME in Machine Learning
Safe Software
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
Techniques for Automatic Device Identification and Network Assignment.pdf
Priyanka Aash
 
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
Fwdays
 
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Priyanka Aash
 
Mastering AI Workflows with FME by Mark Döring
Safe Software
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
2025_06_18 - OpenMetadata Community Meeting.pdf
OpenMetadata
 

OSGi, Eclipse and API Tooling

  • 1. Eclipse, OSGi and API Tooling Chris Aniszczyk (EclipseSource) [email protected] http://eclipsesource.com 1 1 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 2. Who am I? • Chris Aniszczyk  Senior Software Engineer at EclipseSource  Plug-in Development Environment (PDE) Co-Lead  Been doing OSGi before it was en vogue  Committer Representative on Eclipse’s Board of Directors  Co-author Eclipse RCP Book 2nd Edition  I dabble with many things at Eclipse.org • My blog  http://aniszczyk.org • Follow me on Twitter  http://twitter.com/caniszczyk 2 2 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 3. Overview • The need for tooling • Tooling features • Tooling in action! • Future work • Summary • Q&A 3 2 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 4. The need for tooling Remember Kirk’s gigantic Modularity diagram? 4 3 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 5. Define API • APIs are published contracts  Producers specify the contracts  Honor contracts release after release  Evolve the contracts for enhancements and fix problems  Consumers adhere to the contracts  Implement the contracts per specification  Use provided implementations per contract specifications 5 4 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 6. The Ideal Release Equation Developer: Compatibility (producer) + Client: Honor API contract (consumer) = Free migration!!! 6 5 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 7. The Ideal Never Happens... Developer: (features + deprecation + Optional extensions to existing features + Replacement API + Provisional API) + Client: Illegal internal references = Migration at a cost 7 6 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 8. What have we done as developers? • We use Javadoc™ to document contracts  This class is not intended to be instantiated or subclassed by clients.  Has no effect if not read  Inconsistent wording, placement, and use • Use component.xml to specify APIs (at Eclipse.org)  Out of date, not maintained  Why? Because there’s no tooling and it’s separate from the code • We use package names to categorize as public/internal, but all packages are exported • We use OSGi package exports (x-internal and x-friends) to limit visibility, but does not prevent access to internal types • We use Eclipse’s access rules to discourage use, but this can be turned off 8 7 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 9. More things we do… • Manually examine API changes or use some external tool before a release (aka the API Police)  Changes between releases can be significant  Validation is time consuming and error prone  Lost development time (due to checking and bugs found) 9 8 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 10. And we still fail... 10 9 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 11. And we still fail... • At Eclipse, we have had issues with projects unintentionally breaking API... • Outside of Eclipse, it highly varies...  “Commons collections 3.0 is binary compatible with version 2.1 and 2.0 except for certain methods on one class. As the release was a major version, this is permitted, however it was unintentional and an error... the chosen solution is to provide a work around by releasing v2.1.1 and v3.1.” • Surely you’ve come across API issues, right? 11 10 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 12. Disclaimer • This presentation isn’t about API design • API design is still your problem  Designing quality APIs is tough  Ensuring consistent behavior  Evolving APIs is tricky • But there are things that tooling can help with… 12 11 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 13. Good fences... • Check out some of Joshua Bloch’s presentations around API (How to Design API and Why it Matters) and some of the EclipseCon API design presentations... 13 12 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 14. API Tooling Features 14 13 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 15. API Tooling to the Rescue! • Reports  Illegal API use  Binary incompatibility relative to a baseline  Incorrect bundle version numbers  Missing or malformed @since tags  Leakage of non-APIs types inside APIs  Execution Environment validation • Tightly integrated toolset in the Eclipse SDK  Currently limited to Plug-in projects/OSGi bundles  Runs as a builder (auto-build, incremental and full builds)  Immediate feedback as you develop and use APIs 15 14 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 16. Specifying API Contracts • Use Javadoc tags  E.g. @noimplement, @noextend, @noreference, @noinstantiate • Benefits  Contracts live with the code for producers and consumers  Content assist helps developers  Available for projects that are not using 1.5 annotations  Restrictions appear in published Javadoc APIs in a standard way  Tools can process tags 16 15 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 17. API Tooling Javadoc Tags 17 16 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 18. Example of Published API 18 17 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 19. API Usage • Once the APIs are specified, the user needs to make sure that he/she is using them appropriately. • API usage is flagging any kind of illegal usage of API: reference to an API that is not supposed to be referenced, implementation of an interface that is not supposed to be implemented, …. • A consequence of wrong API usage is a potential binary incompatible change error. 19 18 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 20. Why API Usage Scans? API producers can see what internals are being used • Inform clients how to use proper API • Determine what new API needs to be added • Know what clients will be broken • Avoid breaking internals until clients have migrated 20 19 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 21. Validating Binary Compatibility • Evolving APIs such that they are backwards compatible with existing binaries  http://wiki.eclipse.org/index.php/Evolving_Java-based_APIs  It is easy to get it wrong  Now the tooling takes care of this • The user simply specifies an API baseline  Generally this means pointing to the previous release (N – 1) 21 20 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 22. API Comparisons • What’s changed between versions? 22 21 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 23. System Library Validation • Validate system library use based on a bundle’s required execution environment (BREE)  if a bundle claims to run on J2SE-1.4, access to members in J2SE-1.5 and higher are flagged as illegal  See OSGi Specification on Execution Environments 23 22 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 24. Migration Assistance • “What will be broken if I move to a new version?” • “Will my plug-in still run on an older target version?” • We simply re-resolve the references against X, with the code in X+1 • Of course you can get the same information if you compile, but that requires more setup... 24 23 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 25. Bundle version number management • http://wiki.eclipse.org/index.php/Version_Numbering • The tooling takes care of letting the user know when the minor or major version of a bundle should be changed according to rules described in the document:  A new API that is not a breaking change requires the minor version to be incremented  A new API that is a breaking change requires the major version to be incremented • No support for the micro version yet...  Technically speaking, this version should be changed as soon as any modification is made in the source code: comment change, method body change,… 25 24 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 26. OSGi Versioning 101 • major.minor.micro.qualifier  major - An incompatible update; breaking API  minor - A backward compatible update; API stable  micro - A bug fix  qualifier - build date; lexicographic • Versions should encode compatibility at the bundle and package level... aid in evolution... • They aren’t a marketing number! 26 25 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 27. API Tooling in Action (example of bug 191231/191232) 27 25 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2008 EclipseSource
  • 28. API Tooling in Action (API Usage Report) 28 26 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 29. API Tooling in Action (System Library Validation) 29 29 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 30. API Tooling in Action (API Comparison) 30 30 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 31. API Tooling Parts 31 31 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 32. API Profile and API Components • These are the two major pieces used by the API tooling tools to make diagnosis on the code • An API profile can be seen like a PDE target platform • An API profile is a collection of API components • It is initialized using an Eclipse SDK installation plugins directory (or some other directory of bundles) • Inside the IDE, a profile corresponding to the workbench contents is automatically created 32 32 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 33. API Description • This contains the specific restrictions for all the API types of an API component • It is kept up-to-date inside the workbench by using resource listeners • It is exported inside the binary bundles or generated at build time using an ant task. 33 33 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 34. Filtering of API Problems • Each component can define a problem filter • The filtering can be used to remove from reports known breakages. • For example, an API breakage has been approved by the PMC and you don’t want to get it reported for each build. • The problem filter is also part of the binary plug-in 34 34 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 35. Two aspects: IDE and build process • Each feature is available from within the IDE or inside a headless build process via Ant tasks • The IDE support is required to help the Eclipse developer while the code is written • The build process support is required to provide feedback during the Eclipse build. This also allows other projects to use it inside their builds. 35 35 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 36. Build support • Addition of new ant tasks:  Generation of .api_description file  Comparison of SDK drops: binary compatibility, api usage reports • Integration inside the Eclipse builds (headless mode) • Integration inside ant build (no Eclipse running) 36 22 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 37. API Error/Warning Preferences 37 37 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 38. API Setup Wizard 38 38 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 39. API Profile (Baseline) Preferences 39 39 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 40. API Profile (Baseline) Wizard 40 40 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 41. Future work 41 41 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 42. To be done... • Handling of package level versioning • Support extended to support more than just bundles  Pure Java™ projects  Plug-in extension points • Improve integration with Eclipse rel-eng build reporting • Determine compatible version range of required bundles • And what you might suggest... 42 42 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 43. Summary 43 43 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 44. API Tooling Summary • Help you to define your API restrictions • Keep a consistent and standard presentation of API restrictions • Detect binary breakage between a baseline and the current version • Detect wrong API usage • Detect wrong @since tags and inconsistent bundle versioning • Detect Execution Environment problems... • Supports more than just Eclipse (hi OSGi folks)! 44 44 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 45. Links • Wiki  http://wiki.eclipse.org/Api_Tooling • Bugzilla  https://bugs.eclipse.org/bugs/enter_bug.cgi?product=PDE • Get Involved  https://dev.eclipse.org/mailman/listinfo/pde-dev 45 45 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource
  • 46. Q & A 46 46 Eclipse, OSGi and API Tooling | Chris Aniszczyk | © 2010 EclipseSource