SlideShare una empresa de Scribd logo
1 de 46
Descargar para leer sin conexión
Na#ve	
  OSGi
Modular	
  So1ware	
  Development	
  in	
  a	
  Na#ve	
  World
Alexander	
  Broekhuis	
  
alexander.broekhuis@luminis.eu
Sascha	
  Zelzer
s.zelzer@dkfz-­‐heidelberg.de
Agenda
• Introduc#on
• Mo#va#on
• History
• Current	
  State
• Na#ve	
  OSGi
• Outlook
Alexander	
  Broekhuis
• So1ware	
  Developer
• Started	
  as	
  a	
  Java	
  Engineer
• Programming	
  C	
  since	
  2010
• At	
  Luminis	
  since	
  2008
• So1ware	
  House
• Research	
  and	
  innova#on	
  oriented
• Involved	
  in	
  Open	
  Source	
  (Apache)
• Apache	
  commiXer	
  since	
  2010
Sascha	
  Zelzer
• So1ware	
  Developer
• 15	
  years	
  of	
  experience	
  with	
  Java,	
  Eclipse,	
  C++
• Current	
  focus	
  on	
  modular	
  C++	
  systems
• For	
  research	
  environments
• Since	
  2005	
  at	
  the	
  German	
  Cancer	
  Research	
  
Center	
  (DKFZ)
• Large	
  mul#-­‐disciplinary	
  research	
  environment
• Mainly	
  cancer	
  research	
  and	
  medical	
  imaging
• Long	
  open-­‐source	
  history	
  within	
  the	
  department
OSGi	
  is:
• component	
  based	
  framework
• allows	
  dynamic	
  assembly	
  of	
  components
• Java,	
  so	
  independent	
  of	
  opera#ng	
  system
OSGi	
  technology	
  is	
  the	
  dynamic	
  module	
  system	
  for	
  Java™
OSGi	
  technology	
  is	
  Universal	
  Middleware.
OSGi	
  technology	
  provides	
  a	
  service-­‐oriented,	
  component-­‐based	
  
environment	
  for	
  developers	
  and	
  offers	
  standardized	
  ways	
  to	
  
manage	
  the	
  so@ware	
  lifecycle.	
  These	
  capabiliBes	
  greatly	
  increase	
  
the	
  value	
  of	
  a	
  wide	
  range	
  of	
  computers	
  and	
  devices	
  that	
  use	
  the	
  
Java™	
  plaForm.
OSGi
!"#$%&'()*+,'-
!"#$%&'&($
)*+,*
$-.
)*+,/-0)*+,*
)*122"-0 )*12
+&/3$,$)1(3$.
4-"-)*+(($.
4-"-)*+((
"-)*+(($.
"-)*+((
OSGi
!"#$%
&"#$%'()*!!
+%,'()*!!
!"#$%&'!
("#$%)*+,&-,.!!
/0,%(1!"%*&-,.!!
("$%.*23,&-,.!!
!"#$%&'!&#!()
*+,-."#$&+/.!!
!"#$%&!"#$%&
!"#$%&'()*+,'-
!"#$%&'&($
)*+,*
$-.
)*+,/-0)*+,*
)*122"-0 )*12
+&/3$,$)1(3$.
4-"-)*+(($.
4-"-)*+((
"-)*+(($.
"-)*+((
OSGi
!"#$%
&"#$%'()*!!
+%,'()*!!
!"#$%&'!
("#$%)*+,&-,.!!
/0,%(1!"%*&-,.!!
("$%.*23,&-,.!!
!"#$%&'!&#!()
*+,-."#$&+/.!!
!"#$%&!"#$%&
!"#$%&'()*+,'-
OSGi
!"#$%
&"#$%'()*!!
+%,'()*!!
!"#$%&'!
("#$%)*+,&-,.!!
/0,%(1!"%*&-,.!!
("$%.*23,&-,.!!
!"#$%&'!&#!()
*+,-."#$&+/.!!
!"#$%&!"#$%&
!"#$%&'()*+,'-
!"#$%&'&$())'*&+,(-./'%0!$1012-)'3"24$1*&+,(-./'5
''''!"#$%&',.%4')-(/-63"24$17.2-18-'&.2-18-9'5
''''''''&.2-18-:/1;%)-1/<1/,%&16<-./1:&$()):;1-=(0169>'2"$$>'
''''''''''''21?'<-./1@0!$699A
''''B
''''!"#$%&',.%4')-.!63"24$17.2-18-'&.2-18-9'5
''''B
B
!"#$%&"'(")%*+#,
!+-#"
Benefits
• Making	
  products	
  with	
  many	
  varia#ons
• Improving	
  quality	
  through	
  re-­‐use
• Speed:	
  #me	
  to	
  market
Na#ve	
  OSGi
"The	
  Na#ve	
  OSGi	
  project	
  is	
  a	
  collabora#ve	
  
effort	
  to	
  write,	
  test,	
  and	
  implement	
  the	
  Java	
  
OSGi	
  specifica#ons	
  in	
  C	
  and	
  C++	
  with	
  a	
  focus	
  
on	
  interoperability	
  between	
  C,	
  C++	
  and	
  Java"
Mo#va#on	
  -­‐	
  Why?
• C	
  and	
  C++	
  are	
  NOT	
  obsolete
• C++11	
  is	
  a	
  big	
  step	
  forward
• Tradi#onal	
  Applica#on	
  Domains
• Embedded	
  Devices
• Medical	
  Imaging
• Sensor	
  Networks
• Lightweight	
  Na#ve	
  Module	
  System
• Benefits	
  na#ve	
  developers
C/C++	
  Modulariza#on
• Examples
• CORBA	
  and	
  CCM:	
  Portable,	
  heavy-­‐weight
• Service	
  Component	
  Architecture	
  (SCA)
• Problems
• Find	
  a	
  C/C++	
  implementa#on	
  with	
  an	
  appropriate	
  
license
• Scope	
  can	
  be	
  too	
  broad/overwhelming
Benefits
• Mature	
  API
• OSGi	
  is	
  around	
  since	
  1999
• Core	
  Specifica#ons	
  are	
  small
• Enables	
  hybrid	
  Java/C/C++	
  solu#ons
• as	
  an	
  alterna#ve	
  to	
  JNI
• Eases	
  migra#on
• From	
  Na#ve	
  to	
  Java
• Embedded	
  Performance
Challenges
• Dynamic	
  Module	
  Layer
• Code	
  Sharing
• Linking	
  and	
  Versioning
• Different	
  Plajorms
• Posix/Win32/...
History	
  -­‐	
  Universal	
  OSGi
• RFP-­‐89
• Proposed	
  to	
  the	
  mailing	
  in	
  2007
• Since	
  then	
  remained	
  silent
• Ongoing	
  (slow)	
  effort	
  to	
  pick	
  up	
  again
• Focused	
  on
• Suppor#ng	
  different	
  languages	
  in	
  OSGi
• Suppor#ng	
  framework	
  in	
  different	
  languages
• Languages	
  men#oned:	
  
• Na#ve	
  (C	
  and	
  C++),	
  .NET	
  (C#),	
  Scrip#ng	
  (Javascript/Ac#onscript)
History	
  -­‐	
  Universal	
  OSGi
• Completely	
  Different	
  Languages
• Na#ve,	
  Managed,	
  Scrip#ng
• Limit	
  Scope
• Focus	
  on	
  C/C++
• Makes	
  it	
  easier	
  to	
  progress
• Keeps	
  Focus	
  on	
  Common	
  Run#me
“Na$ve-­‐OSGi”
Current	
  State
• OSGi-­‐like	
  Implementa#ons
• CTK	
  Plugin	
  Framework
• Apache	
  Celix
• nOSGi
• Service	
  Oriented	
  Framework	
  (SOF)
Current	
  State
• Small	
  Communi#es
• No	
  Interoperability
• Different	
  bundle	
  format
• API	
  differences
• Wiring	
  solved	
  differently
• Module	
  layer
CTK	
  Plugin	
  Framework
Largest	
  biomedical	
  
research	
  ins#tute	
  in	
  
Germany
Founded	
  in	
  1964,	
  
~2200	
  employees
Developed	
  at	
  the	
  German	
  Cancer	
  Research	
  
Center	
  (DKFZ)
CTK	
  Plugin	
  Framework
• Part	
  of	
  “Common	
  Toolkit”
• Large	
  interna#onal	
  ini#a#ve	
  (medical	
  imaging)
• C++	
  API	
  is	
  very	
  close	
  to	
  the	
  OSGi	
  Specifica#on
• Provides	
  Implementa#ons
• Log
• Configura#on	
  Admin
• Metatype
• Event	
  Admin
• Runs	
  on:	
  Windows,	
  Linux,	
  MacOS
CTK	
  Plugin	
  Framework
Powers	
  an	
  “Eclipse	
  RCP”-­‐like	
  C++	
  plajorm
Apache	
  Celix
• Development	
  started	
  at	
  Thales	
  Netherlands
• Open	
  Sourced	
  /	
  Donated	
  by	
  Luminis	
  to	
  Apache
• Embedded	
  distributed	
  systems
• Dynamic	
  (Re)Configura#on
• Used	
  as	
  middleware	
  in	
  large	
  research	
  project
Apache	
  Celix
• Implemented	
  in	
  C
• API	
  close	
  to	
  the	
  specifica#on
• Adapted	
  to	
  Non-­‐Object	
  Oriented	
  use
• Donated	
  to	
  the	
  Apache	
  Incubator
• Provides
• Log	
  Service	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Remote	
  Service	
  Admin
• Devices	
  Access	
  	
  	
  	
  	
  	
  	
  	
  	
  Deployment	
  Admin
• Shell
nOSGi
• Research	
  project	
  at	
  University	
  of	
  Ulm
• Steffen	
  Kächele
• Very	
  lightweight	
  and	
  fast	
  implementa#on	
  
(only	
  requires	
  c++	
  run#me	
  and	
  unzip)
• Runs	
  on	
  POSIX	
  systems
• Features
• Wiring	
  of	
  shared	
  objects	
  for	
  code-­‐sharing
• Service	
  registry	
  with	
  filters
• Supports	
  source	
  bundles	
  (compiled	
  at	
  run#me)
• Comes	
  with	
  a	
  Shell	
  implementa#on
Service	
  Oriented	
  Framework	
  (SOF)
• Mature	
  open-­‐source	
  project	
  (BSD)
• MaXhias	
  Grosam
• Shared	
  libraries	
  model	
  bundles
• Runs	
  on	
  Windows	
  and	
  Linux
• Features
• Service	
  registry,	
  trackers	
  and	
  listeners
• Provides	
  a	
  command	
  shell
• Remo#ng	
  capabili#es	
  (using	
  CORBA)
• Remote	
  services	
  and	
  service	
  listeners
• Command	
  shell	
  for	
  each	
  process
Specifica#on
• Members
• Goal
• Bundle	
  Format
• Module	
  Layer
• Life	
  Cycle	
  Layer
• Service	
  Layer
• C	
  and	
  C++	
  Interoperability
Members
• CTK	
  Plugin	
  Framework
• Apache	
  Celix
• nOSGi
Ini#al/startup	
  mee#ng	
  took	
  place	
  in	
  Hengelo	
  in	
  
May	
  this	
  year
Goal
• Follow	
  OSGi	
  Specifica#on
• Allow	
  Interoperability
• Bundles
• Remote	
  Services
• Seamless	
  C	
  and	
  C++	
  Interoperability
• E.g.	
  provide	
  a	
  C	
  service,	
  consume	
  via	
  C++	
  interface
Goal
• Grow	
  Communi#es
• Combine	
  where	
  possible
• Channel	
  efforts
• Write	
  Open	
  Source	
  reference
• All	
  feedback	
  is	
  welcome!
Realiza#on
Same	
  Format,	
  Different	
  Layout
Packages	
  equal	
  Shared	
  Libraries
Class	
  Loader	
  replaced	
  by	
  Dynamic	
  Linker
Bundle	
  Format
• Like	
  Java	
  Archives	
  (JAR)
• Using	
  ZIP	
  format
• Bundle	
  Manifest
• .cmf	
  vs	
  .mf
• Headers
• Op#onals
• Libraries
• Resources
Layout:
-­‐META-­‐INF/
-­‐MANIFEST.CMF
-­‐OSGI-­‐OPT
-­‐share/
-­‐include/
-­‐src/
-­‐lib/
-­‐resources/
Module	
  Layer
• Shared	
  Libraries	
  model	
  Java	
  Packages
• Allows	
  Code	
  Sharing
• Mul#ple	
  Libraries	
  per	
  Bundle
• Symbols	
  must	
  be	
  exported	
  explicitly
• Addi#onal	
  visibility	
  control
• Symbol	
  Searching	
  Handled	
  by	
  Linker
• Meta-­‐data
• Import/Export	
  Headers
• Execu#on	
  Environment	
  for	
  Addi#onal	
  Requirements
“Package”	
  Wiring
• Mechanism	
  from	
  nOSGi
• Library	
  Dependencies	
  Patched	
  at	
  Run#me
• To	
  match	
  with	
  available	
  exports
• Allows	
  Mul#ple	
  Versions
• Of	
  the	
  same	
  package
• Allows	
  Bundle	
  Updates
“Package”	
  Wiring
Life	
  Cycle	
  Layer
• Follows	
  Specifica#on
• Resolves	
  Dependencies	
  using	
  Manifest
• Bundle	
  Ac#vator	
  API
• Start	
  Ac#vator
• Stop	
  Ac#vator
• Na#ve	
  Specific
• Create	
  Ac#vator
• Destroy	
  Ac#vator
!"#$%&'&($
)*+,*
$-.
)*+,/-0)*+,*
)*122"-0 )*12
+&/3$,$)1(3$.
4-"-)*+(($.
4-"-)*+((
"-)*+(($.
"-)*+((
Service	
  Layer
• Na#ve	
  API	
  Close	
  to	
  the	
  Specifica#on
• Especially	
  C++
• C	
  API	
  is	
  adapted	
  to	
  Non-­‐Object	
  Oriented	
  use
• Requirements	
  for	
  C++
• Be	
  Type-­‐Safe
• Avoid	
  exposing	
  void*	
  where	
  possible
• Do	
  not	
  require	
  a	
  Service	
  base	
  class
• Allow	
  mul#ple	
  inheritance	
  of	
  Service	
  interfaces
Service	
  Layer
• Requirements	
  for	
  C
• Use	
  Struct	
  with	
  Func#on	
  pointers	
  for	
  Services
• Components	
  are	
  represented	
  as	
  void*
• Return	
  value	
  only	
  used	
  for	
  error	
  codes
• Return	
  values	
  via	
  arguments
C	
  /	
  C++	
  Interoperability
• Na#ve-­‐OSGi
• Provides	
  both	
  C	
  and	
  C++	
  headers
• Provide	
  thin	
  bi-­‐direc#onal	
  wrapping
• Service	
  Interfaces
• Should	
  provide	
  C	
  and	
  C++
• C++	
  Services	
  implemented	
  using	
  Interfaces
• C	
  Services	
  implemented	
  using	
  Structs	
  and	
  Func#on	
  
Pointers
C	
  /	
  C++	
  Interoperability
• Service	
  Interfaces
• Provide	
  bindings	
  for	
  C	
  -­‐>	
  C++	
  and	
  C++	
  -­‐>	
  C
• IDL	
  for	
  Service	
  descrip#on	
  and	
  code	
  genera#on
• Service	
  Provider
• Implement	
  either	
  the	
  C	
  or	
  C++	
  header
• Service	
  Consumer
• Use	
  either	
  the	
  C	
  or	
  C++	
  API
C	
  /	
  C++	
  Interoperability
Native OSGi
C Framework Impl
C API
Headers & Utilities
C++ to C Wrapper
C++ API
CBundle
C++Bundle
C++Bundle
Native OSGi
C++ Framework Impl
C++ API
Headers & Utilities
C to C++ Wrapper
C API
CBundle
Code	
  Examples	
  -­‐	
  Interface	
  Declara#on
greeting_service.h
typedef struct greeting *greeting_t;
typedef struct greeting_service
*greeting_service_t;
#ifdef __cplusplus
extern "C"
#endif
struct greeting_service {
greeting_t instance;
void (*greeting_sayHello)
(greeting_t instance);
};
IGreetingService.h
struct IGreetingService {
virtual ~IGreetingService();
virtual void sayHello() const = 0;
};
OSGI_DECLARE_SERVICE_INTERFACE(
IGreetingService, IGreetingService_NAME)
Code	
  Examples	
  -­‐	
  Service	
  Registra#on
greeting_impl.c
#include "greeting_service.h"
struct greeting {
char *name;
};
void greeting_sayHello(greeting_t instance) {
printf("Greetings from %sn", instance->name);
}
void register_services() {
BUNDLE_CONTEXT context = ...
greeting_service_t greeter = malloc(...);
greeter->instance = malloc(...);
greeter->instance->name = "C greeter";
greeter->greeting_sayHello =
greeting_sayHello;
bundleContext_registerService(context,
IGreetingService_NAME, greeter, NULL, NULL);
}
GreetingImpl.cpp
#include <IGreetingService.h>
struct CppGreeter : public IGreetingService {
std::string name;
void sayHello() const {
std::cout << "Greetings from " << name << std::endl;
}
};
void register_services() {
osgi::BundleContext* context = ...
CppGreeter* greeter = new CppGreeter;
greeter->name = "C++ greeter";
context->registerService<IGreetingService>(greeter,
osgi::ServiceProperties());
}
Code	
  Examples	
  -­‐	
  Service	
  Consump#on
consumer_impl.c
BUNDLE_CONTEXT context = ...
SERVICE_REFERENCE serviceRef = NULL;
bundleContext_getServiceReference(context, IGreetingService_NAME, &serviceRef);
void* serviceHandle = NULL;
bundleContext_getService(context, serviceRef, &serviceHandle)
greeting_service_t service = (greeting_service_t)serviceHandle;
service->greeting_sayHello(service->instance);
ConsumerImpl.cpp
osgi::BundleContext* context = ...
typedef osgi::ServiceReference<IGreetingService> ServiceReferenceType;
ServiceReferenceType greetingRef = context->getServiceReference<IGreetingService>();
IGreetingService* greetingService = context->getService(greetingRef);
greetingService->sayHello();
Outlook
• Write	
  Specifica#on
• Test	
  ideas/solu#ons
• As	
  part	
  of	
  the	
  OSGi	
  Alliance
• Define	
  Reference	
  Implementa#on
• Look	
  into	
  Compendium	
  Services
• Remote	
  Service	
  as	
  alterna#ve	
  to	
  JNI
• Adapt	
  other	
  Services	
  to	
  Na#ve-­‐OSGi
• Community!
Resources
• Na#ve-­‐OSGi:	
  www.na#veosgi.org
• Apache	
  Celix:	
  
• incubator.apache.org/celix
• CTK	
  Plugin	
  Framework:	
  
• www.commontk.org/index.php/Documenta#on/Plugin_Framework
• nOSGi:
• www.uni-­‐ulm.de/in/vs/proj/nosgi/
• SOF:
• sof.#ddlyspot.com/

Más contenido relacionado

La actualidad más candente

Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Sam Brannen
 
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...J V
 
Deltacloud Presentation - OSSConf 2010
Deltacloud Presentation - OSSConf 2010Deltacloud Presentation - OSSConf 2010
Deltacloud Presentation - OSSConf 2010Michal Fojtik
 
Eclipse JDT Embraces Java 9 – An Insider’s View
Eclipse JDT Embraces Java 9 – An Insider’s ViewEclipse JDT Embraces Java 9 – An Insider’s View
Eclipse JDT Embraces Java 9 – An Insider’s ViewDev_Events
 
Developing modular Java applications
Developing modular Java applicationsDeveloping modular Java applications
Developing modular Java applicationsJulien Dubois
 
Enterprise Java Web Application Frameworks Sample Stack Implementation
Enterprise Java Web Application Frameworks   Sample Stack ImplementationEnterprise Java Web Application Frameworks   Sample Stack Implementation
Enterprise Java Web Application Frameworks Sample Stack ImplementationMert Çalışkan
 
Overview of the new .NET Core and .NET Platform Standard
Overview of the new .NET Core and .NET Platform StandardOverview of the new .NET Core and .NET Platform Standard
Overview of the new .NET Core and .NET Platform StandardAlex Thissen
 
Java SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionJava SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionStephen Colebourne
 
MyFaces CODI v0.9.0 News
MyFaces CODI v0.9.0 NewsMyFaces CODI v0.9.0 News
MyFaces CODI v0.9.0 Newsos890
 
Building a server platform with os gi
Building a server platform with os giBuilding a server platform with os gi
Building a server platform with os giDileepa Jayakody
 
Session 41 - Struts 2 Introduction
Session 41 - Struts 2 IntroductionSession 41 - Struts 2 Introduction
Session 41 - Struts 2 IntroductionPawanMM
 

La actualidad más candente (20)

Node.js code tracing
Node.js code tracingNode.js code tracing
Node.js code tracing
 
Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1
 
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...
 
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
 
Deltacloud Presentation - OSSConf 2010
Deltacloud Presentation - OSSConf 2010Deltacloud Presentation - OSSConf 2010
Deltacloud Presentation - OSSConf 2010
 
Eclipse JDT Embraces Java 9 – An Insider’s View
Eclipse JDT Embraces Java 9 – An Insider’s ViewEclipse JDT Embraces Java 9 – An Insider’s View
Eclipse JDT Embraces Java 9 – An Insider’s View
 
Java 9, JShell, and Modularity
Java 9, JShell, and ModularityJava 9, JShell, and Modularity
Java 9, JShell, and Modularity
 
Javantura v4 - JVM++ The GraalVM - Martin Toshev
Javantura v4 - JVM++ The GraalVM - Martin ToshevJavantura v4 - JVM++ The GraalVM - Martin Toshev
Javantura v4 - JVM++ The GraalVM - Martin Toshev
 
Deltacloud API
Deltacloud APIDeltacloud API
Deltacloud API
 
Turbo charging v8 engine
Turbo charging v8 engineTurbo charging v8 engine
Turbo charging v8 engine
 
QtQuick Day 1
QtQuick Day 1QtQuick Day 1
QtQuick Day 1
 
OSGi Cloud Ecosystems
OSGi Cloud EcosystemsOSGi Cloud Ecosystems
OSGi Cloud Ecosystems
 
Developing modular Java applications
Developing modular Java applicationsDeveloping modular Java applications
Developing modular Java applications
 
Enterprise Java Web Application Frameworks Sample Stack Implementation
Enterprise Java Web Application Frameworks   Sample Stack ImplementationEnterprise Java Web Application Frameworks   Sample Stack Implementation
Enterprise Java Web Application Frameworks Sample Stack Implementation
 
Overview of the new .NET Core and .NET Platform Standard
Overview of the new .NET Core and .NET Platform StandardOverview of the new .NET Core and .NET Platform Standard
Overview of the new .NET Core and .NET Platform Standard
 
Java SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionJava SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introduction
 
MyFaces CODI v0.9.0 News
MyFaces CODI v0.9.0 NewsMyFaces CODI v0.9.0 News
MyFaces CODI v0.9.0 News
 
Building a server platform with os gi
Building a server platform with os giBuilding a server platform with os gi
Building a server platform with os gi
 
Session 41 - Struts 2 Introduction
Session 41 - Struts 2 IntroductionSession 41 - Struts 2 Introduction
Session 41 - Struts 2 Introduction
 
Modular Java
Modular JavaModular Java
Modular Java
 

Destacado

Postmodernismo 2n PARTE
Postmodernismo 2n PARTEPostmodernismo 2n PARTE
Postmodernismo 2n PARTEartestudio
 
Presentación Parkour.
Presentación Parkour.Presentación Parkour.
Presentación Parkour.fanfatal
 
Samuelson nordhaus economiapdf1-1
Samuelson nordhaus economiapdf1-1Samuelson nordhaus economiapdf1-1
Samuelson nordhaus economiapdf1-1gestao2014
 
Understanding Telecom SIM and USIM/ISIM for LTE
Understanding Telecom SIM and USIM/ISIM for LTEUnderstanding Telecom SIM and USIM/ISIM for LTE
Understanding Telecom SIM and USIM/ISIM for LTEntel
 
Expreciones de artes
Expreciones de artesExpreciones de artes
Expreciones de artesFabian Mora
 
Browser-based Secure Remote Access for the Internet of Things
Browser-based Secure Remote Access for the Internet of ThingsBrowser-based Secure Remote Access for the Internet of Things
Browser-based Secure Remote Access for the Internet of ThingsGünter Obiltschnig
 
ApacheCon NA11 - Apache Celix, Universal OSGi?
ApacheCon NA11 - Apache Celix, Universal OSGi?ApacheCon NA11 - Apache Celix, Universal OSGi?
ApacheCon NA11 - Apache Celix, Universal OSGi?abroekhuis
 
teléfono 9. Currículo Nisán parte ambiental residual pasta coloide web 10. Fl...
teléfono 9.	Currículo Nisán parte ambiental residual pasta coloide web 10.	Fl...teléfono 9.	Currículo Nisán parte ambiental residual pasta coloide web 10.	Fl...
teléfono 9. Currículo Nisán parte ambiental residual pasta coloide web 10. Fl...Maxwell Altamirano
 
Alexis limousine & sedan service
Alexis limousine & sedan serviceAlexis limousine & sedan service
Alexis limousine & sedan servicematajuan
 
ANDS Webinar. Data Management Policies and People
ANDS Webinar. Data Management Policies and PeopleANDS Webinar. Data Management Policies and People
ANDS Webinar. Data Management Policies and PeopleJulia Gross
 

Destacado (20)

LA CRÓNICA 701
LA CRÓNICA 701LA CRÓNICA 701
LA CRÓNICA 701
 
Revista ENSantidade ed 18
Revista ENSantidade ed 18Revista ENSantidade ed 18
Revista ENSantidade ed 18
 
Postmodernismo 2n PARTE
Postmodernismo 2n PARTEPostmodernismo 2n PARTE
Postmodernismo 2n PARTE
 
Plantilla hosteleria 5.1
Plantilla hosteleria 5.1Plantilla hosteleria 5.1
Plantilla hosteleria 5.1
 
Japonya ulke raporu_2013
Japonya ulke raporu_2013Japonya ulke raporu_2013
Japonya ulke raporu_2013
 
Presentación Parkour.
Presentación Parkour.Presentación Parkour.
Presentación Parkour.
 
Samuelson nordhaus economiapdf1-1
Samuelson nordhaus economiapdf1-1Samuelson nordhaus economiapdf1-1
Samuelson nordhaus economiapdf1-1
 
Estudio de un Enfermo de la Piel
Estudio de un Enfermo de la PielEstudio de un Enfermo de la Piel
Estudio de un Enfermo de la Piel
 
Hoja de vida maryxabel (final)
Hoja de vida   maryxabel (final)Hoja de vida   maryxabel (final)
Hoja de vida maryxabel (final)
 
Understanding Telecom SIM and USIM/ISIM for LTE
Understanding Telecom SIM and USIM/ISIM for LTEUnderstanding Telecom SIM and USIM/ISIM for LTE
Understanding Telecom SIM and USIM/ISIM for LTE
 
Expreciones de artes
Expreciones de artesExpreciones de artes
Expreciones de artes
 
Browser-based Secure Remote Access for the Internet of Things
Browser-based Secure Remote Access for the Internet of ThingsBrowser-based Secure Remote Access for the Internet of Things
Browser-based Secure Remote Access for the Internet of Things
 
ApacheCon NA11 - Apache Celix, Universal OSGi?
ApacheCon NA11 - Apache Celix, Universal OSGi?ApacheCon NA11 - Apache Celix, Universal OSGi?
ApacheCon NA11 - Apache Celix, Universal OSGi?
 
InteliWISE Wirtualny konsultant, POPC 2.1, Centrum pomocy, infolinia, wsparc...
InteliWISE Wirtualny konsultant, POPC 2.1, Centrum pomocy, infolinia,  wsparc...InteliWISE Wirtualny konsultant, POPC 2.1, Centrum pomocy, infolinia,  wsparc...
InteliWISE Wirtualny konsultant, POPC 2.1, Centrum pomocy, infolinia, wsparc...
 
teléfono 9. Currículo Nisán parte ambiental residual pasta coloide web 10. Fl...
teléfono 9.	Currículo Nisán parte ambiental residual pasta coloide web 10.	Fl...teléfono 9.	Currículo Nisán parte ambiental residual pasta coloide web 10.	Fl...
teléfono 9. Currículo Nisán parte ambiental residual pasta coloide web 10. Fl...
 
Advertising
AdvertisingAdvertising
Advertising
 
Alexis limousine & sedan service
Alexis limousine & sedan serviceAlexis limousine & sedan service
Alexis limousine & sedan service
 
Jumrik
JumrikJumrik
Jumrik
 
产品目录
产品目录产品目录
产品目录
 
ANDS Webinar. Data Management Policies and People
ANDS Webinar. Data Management Policies and PeopleANDS Webinar. Data Management Policies and People
ANDS Webinar. Data Management Policies and People
 

Similar a Native OSGi, Modular Software Development in a Native World - Alexander Broekhuis, Sascha Zelzer

Cloudsolutionday 2016: DevOps workflow with Docker on AWS
Cloudsolutionday 2016: DevOps workflow with Docker on AWSCloudsolutionday 2016: DevOps workflow with Docker on AWS
Cloudsolutionday 2016: DevOps workflow with Docker on AWSAWS Vietnam Community
 
A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...
A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...
A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...Nuxeo
 
Portable Class Library Deep Dive
Portable Class Library Deep DivePortable Class Library Deep Dive
Portable Class Library Deep DiveJames Montemagno
 
Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)Florent Guillaume
 
Starting from scratch in 2017
Starting from scratch in 2017Starting from scratch in 2017
Starting from scratch in 2017Stefano Bonetta
 
OSGi on Google Android using Apache Felix
OSGi on Google Android using Apache FelixOSGi on Google Android using Apache Felix
OSGi on Google Android using Apache FelixMarcel Offermans
 
Native App Development for iOS, Android, and Windows with Visual Studio
Native App Development for iOS, Android, and Windows with Visual StudioNative App Development for iOS, Android, and Windows with Visual Studio
Native App Development for iOS, Android, and Windows with Visual StudioXamarin
 
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...IncQuery Labs
 
Pitch open plant_fund_dokubricks_v8
Pitch open plant_fund_dokubricks_v8Pitch open plant_fund_dokubricks_v8
Pitch open plant_fund_dokubricks_v8docubricks
 
Docubricks Cambridge Open Plant Pitch
Docubricks Cambridge Open Plant Pitch Docubricks Cambridge Open Plant Pitch
Docubricks Cambridge Open Plant Pitch docubricks
 
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...mfrancis
 
Eclipse Apricot
Eclipse ApricotEclipse Apricot
Eclipse ApricotNuxeo
 
Journey towards serverless infrastructure
Journey towards serverless infrastructureJourney towards serverless infrastructure
Journey towards serverless infrastructureVille Seppänen
 
Why kubernetes matters
Why kubernetes mattersWhy kubernetes matters
Why kubernetes mattersPlatform9
 
Composable Software Architecture with Spring
Composable Software Architecture with SpringComposable Software Architecture with Spring
Composable Software Architecture with SpringSam Brannen
 
Chicago Microservices Integration Talk
Chicago Microservices Integration TalkChicago Microservices Integration Talk
Chicago Microservices Integration TalkChristian Posta
 

Similar a Native OSGi, Modular Software Development in a Native World - Alexander Broekhuis, Sascha Zelzer (20)

Apereo OAE - Bootcamp
Apereo OAE - BootcampApereo OAE - Bootcamp
Apereo OAE - Bootcamp
 
Cloudsolutionday 2016: DevOps workflow with Docker on AWS
Cloudsolutionday 2016: DevOps workflow with Docker on AWSCloudsolutionday 2016: DevOps workflow with Docker on AWS
Cloudsolutionday 2016: DevOps workflow with Docker on AWS
 
Sas 2015 event_driven
Sas 2015 event_drivenSas 2015 event_driven
Sas 2015 event_driven
 
A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...
A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...
A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...
 
Portable Class Library Deep Dive
Portable Class Library Deep DivePortable Class Library Deep Dive
Portable Class Library Deep Dive
 
Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)
 
Starting from scratch in 2017
Starting from scratch in 2017Starting from scratch in 2017
Starting from scratch in 2017
 
OSGi on Google Android using Apache Felix
OSGi on Google Android using Apache FelixOSGi on Google Android using Apache Felix
OSGi on Google Android using Apache Felix
 
Native App Development for iOS, Android, and Windows with Visual Studio
Native App Development for iOS, Android, and Windows with Visual StudioNative App Development for iOS, Android, and Windows with Visual Studio
Native App Development for iOS, Android, and Windows with Visual Studio
 
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
 
Pitch open plant_fund_dokubricks_v8
Pitch open plant_fund_dokubricks_v8Pitch open plant_fund_dokubricks_v8
Pitch open plant_fund_dokubricks_v8
 
Docubricks Cambridge Open Plant Pitch
Docubricks Cambridge Open Plant Pitch Docubricks Cambridge Open Plant Pitch
Docubricks Cambridge Open Plant Pitch
 
Avoiding cloud lock-in
Avoiding cloud lock-inAvoiding cloud lock-in
Avoiding cloud lock-in
 
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...
Distributed OSGi Services with the Eclipse Communication Framework - Jan Rell...
 
Eclipse Apricot
Eclipse ApricotEclipse Apricot
Eclipse Apricot
 
Journey towards serverless infrastructure
Journey towards serverless infrastructureJourney towards serverless infrastructure
Journey towards serverless infrastructure
 
Why kubernetes matters
Why kubernetes mattersWhy kubernetes matters
Why kubernetes matters
 
Composable Software Architecture with Spring
Composable Software Architecture with SpringComposable Software Architecture with Spring
Composable Software Architecture with Spring
 
Best DotNet Training in Delhi
Best   DotNet Training  in DelhiBest   DotNet Training  in Delhi
Best DotNet Training in Delhi
 
Chicago Microservices Integration Talk
Chicago Microservices Integration TalkChicago Microservices Integration Talk
Chicago Microservices Integration Talk
 

Más de mfrancis

Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...mfrancis
 
OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)mfrancis
 
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)mfrancis
 
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank LyaruuOSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruumfrancis
 
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...mfrancis
 
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...mfrancis
 
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...mfrancis
 
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)mfrancis
 
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...mfrancis
 
OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)mfrancis
 
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...mfrancis
 
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...mfrancis
 
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...mfrancis
 
Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)mfrancis
 
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)mfrancis
 
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)mfrancis
 
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...mfrancis
 
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)mfrancis
 
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...mfrancis
 
How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)mfrancis
 

Más de mfrancis (20)

Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
 
OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)
 
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
 
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank LyaruuOSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
 
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
 
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
 
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
 
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
 
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
 
OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)
 
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
 
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
 
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
 
Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)
 
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
 
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
 
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
 
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
 
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
 
How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 

Último (20)

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

Native OSGi, Modular Software Development in a Native World - Alexander Broekhuis, Sascha Zelzer

  • 1. Na#ve  OSGi Modular  So1ware  Development  in  a  Na#ve  World Alexander  Broekhuis   alexander.broekhuis@luminis.eu Sascha  Zelzer s.zelzer@dkfz-­‐heidelberg.de
  • 2. Agenda • Introduc#on • Mo#va#on • History • Current  State • Na#ve  OSGi • Outlook
  • 3. Alexander  Broekhuis • So1ware  Developer • Started  as  a  Java  Engineer • Programming  C  since  2010 • At  Luminis  since  2008 • So1ware  House • Research  and  innova#on  oriented • Involved  in  Open  Source  (Apache) • Apache  commiXer  since  2010
  • 4. Sascha  Zelzer • So1ware  Developer • 15  years  of  experience  with  Java,  Eclipse,  C++ • Current  focus  on  modular  C++  systems • For  research  environments • Since  2005  at  the  German  Cancer  Research   Center  (DKFZ) • Large  mul#-­‐disciplinary  research  environment • Mainly  cancer  research  and  medical  imaging • Long  open-­‐source  history  within  the  department
  • 5. OSGi  is: • component  based  framework • allows  dynamic  assembly  of  components • Java,  so  independent  of  opera#ng  system OSGi  technology  is  the  dynamic  module  system  for  Java™ OSGi  technology  is  Universal  Middleware. OSGi  technology  provides  a  service-­‐oriented,  component-­‐based   environment  for  developers  and  offers  standardized  ways  to   manage  the  so@ware  lifecycle.  These  capabiliBes  greatly  increase   the  value  of  a  wide  range  of  computers  and  devices  that  use  the   Java™  plaForm.
  • 10. Benefits • Making  products  with  many  varia#ons • Improving  quality  through  re-­‐use • Speed:  #me  to  market
  • 11. Na#ve  OSGi "The  Na#ve  OSGi  project  is  a  collabora#ve   effort  to  write,  test,  and  implement  the  Java   OSGi  specifica#ons  in  C  and  C++  with  a  focus   on  interoperability  between  C,  C++  and  Java"
  • 12. Mo#va#on  -­‐  Why? • C  and  C++  are  NOT  obsolete • C++11  is  a  big  step  forward • Tradi#onal  Applica#on  Domains • Embedded  Devices • Medical  Imaging • Sensor  Networks • Lightweight  Na#ve  Module  System • Benefits  na#ve  developers
  • 13. C/C++  Modulariza#on • Examples • CORBA  and  CCM:  Portable,  heavy-­‐weight • Service  Component  Architecture  (SCA) • Problems • Find  a  C/C++  implementa#on  with  an  appropriate   license • Scope  can  be  too  broad/overwhelming
  • 14. Benefits • Mature  API • OSGi  is  around  since  1999 • Core  Specifica#ons  are  small • Enables  hybrid  Java/C/C++  solu#ons • as  an  alterna#ve  to  JNI • Eases  migra#on • From  Na#ve  to  Java • Embedded  Performance
  • 15. Challenges • Dynamic  Module  Layer • Code  Sharing • Linking  and  Versioning • Different  Plajorms • Posix/Win32/...
  • 16. History  -­‐  Universal  OSGi • RFP-­‐89 • Proposed  to  the  mailing  in  2007 • Since  then  remained  silent • Ongoing  (slow)  effort  to  pick  up  again • Focused  on • Suppor#ng  different  languages  in  OSGi • Suppor#ng  framework  in  different  languages • Languages  men#oned:   • Na#ve  (C  and  C++),  .NET  (C#),  Scrip#ng  (Javascript/Ac#onscript)
  • 17. History  -­‐  Universal  OSGi • Completely  Different  Languages • Na#ve,  Managed,  Scrip#ng • Limit  Scope • Focus  on  C/C++ • Makes  it  easier  to  progress • Keeps  Focus  on  Common  Run#me “Na$ve-­‐OSGi”
  • 18. Current  State • OSGi-­‐like  Implementa#ons • CTK  Plugin  Framework • Apache  Celix • nOSGi • Service  Oriented  Framework  (SOF)
  • 19. Current  State • Small  Communi#es • No  Interoperability • Different  bundle  format • API  differences • Wiring  solved  differently • Module  layer
  • 20. CTK  Plugin  Framework Largest  biomedical   research  ins#tute  in   Germany Founded  in  1964,   ~2200  employees Developed  at  the  German  Cancer  Research   Center  (DKFZ)
  • 21. CTK  Plugin  Framework • Part  of  “Common  Toolkit” • Large  interna#onal  ini#a#ve  (medical  imaging) • C++  API  is  very  close  to  the  OSGi  Specifica#on • Provides  Implementa#ons • Log • Configura#on  Admin • Metatype • Event  Admin • Runs  on:  Windows,  Linux,  MacOS
  • 22. CTK  Plugin  Framework Powers  an  “Eclipse  RCP”-­‐like  C++  plajorm
  • 23. Apache  Celix • Development  started  at  Thales  Netherlands • Open  Sourced  /  Donated  by  Luminis  to  Apache • Embedded  distributed  systems • Dynamic  (Re)Configura#on • Used  as  middleware  in  large  research  project
  • 24. Apache  Celix • Implemented  in  C • API  close  to  the  specifica#on • Adapted  to  Non-­‐Object  Oriented  use • Donated  to  the  Apache  Incubator • Provides • Log  Service                                Remote  Service  Admin • Devices  Access                  Deployment  Admin • Shell
  • 25. nOSGi • Research  project  at  University  of  Ulm • Steffen  Kächele • Very  lightweight  and  fast  implementa#on   (only  requires  c++  run#me  and  unzip) • Runs  on  POSIX  systems • Features • Wiring  of  shared  objects  for  code-­‐sharing • Service  registry  with  filters • Supports  source  bundles  (compiled  at  run#me) • Comes  with  a  Shell  implementa#on
  • 26. Service  Oriented  Framework  (SOF) • Mature  open-­‐source  project  (BSD) • MaXhias  Grosam • Shared  libraries  model  bundles • Runs  on  Windows  and  Linux • Features • Service  registry,  trackers  and  listeners • Provides  a  command  shell • Remo#ng  capabili#es  (using  CORBA) • Remote  services  and  service  listeners • Command  shell  for  each  process
  • 27. Specifica#on • Members • Goal • Bundle  Format • Module  Layer • Life  Cycle  Layer • Service  Layer • C  and  C++  Interoperability
  • 28. Members • CTK  Plugin  Framework • Apache  Celix • nOSGi Ini#al/startup  mee#ng  took  place  in  Hengelo  in   May  this  year
  • 29. Goal • Follow  OSGi  Specifica#on • Allow  Interoperability • Bundles • Remote  Services • Seamless  C  and  C++  Interoperability • E.g.  provide  a  C  service,  consume  via  C++  interface
  • 30. Goal • Grow  Communi#es • Combine  where  possible • Channel  efforts • Write  Open  Source  reference • All  feedback  is  welcome!
  • 31. Realiza#on Same  Format,  Different  Layout Packages  equal  Shared  Libraries Class  Loader  replaced  by  Dynamic  Linker
  • 32. Bundle  Format • Like  Java  Archives  (JAR) • Using  ZIP  format • Bundle  Manifest • .cmf  vs  .mf • Headers • Op#onals • Libraries • Resources Layout: -­‐META-­‐INF/ -­‐MANIFEST.CMF -­‐OSGI-­‐OPT -­‐share/ -­‐include/ -­‐src/ -­‐lib/ -­‐resources/
  • 33. Module  Layer • Shared  Libraries  model  Java  Packages • Allows  Code  Sharing • Mul#ple  Libraries  per  Bundle • Symbols  must  be  exported  explicitly • Addi#onal  visibility  control • Symbol  Searching  Handled  by  Linker • Meta-­‐data • Import/Export  Headers • Execu#on  Environment  for  Addi#onal  Requirements
  • 34. “Package”  Wiring • Mechanism  from  nOSGi • Library  Dependencies  Patched  at  Run#me • To  match  with  available  exports • Allows  Mul#ple  Versions • Of  the  same  package • Allows  Bundle  Updates
  • 36. Life  Cycle  Layer • Follows  Specifica#on • Resolves  Dependencies  using  Manifest • Bundle  Ac#vator  API • Start  Ac#vator • Stop  Ac#vator • Na#ve  Specific • Create  Ac#vator • Destroy  Ac#vator !"#$%&'&($ )*+,* $-. )*+,/-0)*+,* )*122"-0 )*12 +&/3$,$)1(3$. 4-"-)*+(($. 4-"-)*+(( "-)*+(($. "-)*+((
  • 37. Service  Layer • Na#ve  API  Close  to  the  Specifica#on • Especially  C++ • C  API  is  adapted  to  Non-­‐Object  Oriented  use • Requirements  for  C++ • Be  Type-­‐Safe • Avoid  exposing  void*  where  possible • Do  not  require  a  Service  base  class • Allow  mul#ple  inheritance  of  Service  interfaces
  • 38. Service  Layer • Requirements  for  C • Use  Struct  with  Func#on  pointers  for  Services • Components  are  represented  as  void* • Return  value  only  used  for  error  codes • Return  values  via  arguments
  • 39. C  /  C++  Interoperability • Na#ve-­‐OSGi • Provides  both  C  and  C++  headers • Provide  thin  bi-­‐direc#onal  wrapping • Service  Interfaces • Should  provide  C  and  C++ • C++  Services  implemented  using  Interfaces • C  Services  implemented  using  Structs  and  Func#on   Pointers
  • 40. C  /  C++  Interoperability • Service  Interfaces • Provide  bindings  for  C  -­‐>  C++  and  C++  -­‐>  C • IDL  for  Service  descrip#on  and  code  genera#on • Service  Provider • Implement  either  the  C  or  C++  header • Service  Consumer • Use  either  the  C  or  C++  API
  • 41. C  /  C++  Interoperability Native OSGi C Framework Impl C API Headers & Utilities C++ to C Wrapper C++ API CBundle C++Bundle C++Bundle Native OSGi C++ Framework Impl C++ API Headers & Utilities C to C++ Wrapper C API CBundle
  • 42. Code  Examples  -­‐  Interface  Declara#on greeting_service.h typedef struct greeting *greeting_t; typedef struct greeting_service *greeting_service_t; #ifdef __cplusplus extern "C" #endif struct greeting_service { greeting_t instance; void (*greeting_sayHello) (greeting_t instance); }; IGreetingService.h struct IGreetingService { virtual ~IGreetingService(); virtual void sayHello() const = 0; }; OSGI_DECLARE_SERVICE_INTERFACE( IGreetingService, IGreetingService_NAME)
  • 43. Code  Examples  -­‐  Service  Registra#on greeting_impl.c #include "greeting_service.h" struct greeting { char *name; }; void greeting_sayHello(greeting_t instance) { printf("Greetings from %sn", instance->name); } void register_services() { BUNDLE_CONTEXT context = ... greeting_service_t greeter = malloc(...); greeter->instance = malloc(...); greeter->instance->name = "C greeter"; greeter->greeting_sayHello = greeting_sayHello; bundleContext_registerService(context, IGreetingService_NAME, greeter, NULL, NULL); } GreetingImpl.cpp #include <IGreetingService.h> struct CppGreeter : public IGreetingService { std::string name; void sayHello() const { std::cout << "Greetings from " << name << std::endl; } }; void register_services() { osgi::BundleContext* context = ... CppGreeter* greeter = new CppGreeter; greeter->name = "C++ greeter"; context->registerService<IGreetingService>(greeter, osgi::ServiceProperties()); }
  • 44. Code  Examples  -­‐  Service  Consump#on consumer_impl.c BUNDLE_CONTEXT context = ... SERVICE_REFERENCE serviceRef = NULL; bundleContext_getServiceReference(context, IGreetingService_NAME, &serviceRef); void* serviceHandle = NULL; bundleContext_getService(context, serviceRef, &serviceHandle) greeting_service_t service = (greeting_service_t)serviceHandle; service->greeting_sayHello(service->instance); ConsumerImpl.cpp osgi::BundleContext* context = ... typedef osgi::ServiceReference<IGreetingService> ServiceReferenceType; ServiceReferenceType greetingRef = context->getServiceReference<IGreetingService>(); IGreetingService* greetingService = context->getService(greetingRef); greetingService->sayHello();
  • 45. Outlook • Write  Specifica#on • Test  ideas/solu#ons • As  part  of  the  OSGi  Alliance • Define  Reference  Implementa#on • Look  into  Compendium  Services • Remote  Service  as  alterna#ve  to  JNI • Adapt  other  Services  to  Na#ve-­‐OSGi • Community!
  • 46. Resources • Na#ve-­‐OSGi:  www.na#veosgi.org • Apache  Celix:   • incubator.apache.org/celix • CTK  Plugin  Framework:   • www.commontk.org/index.php/Documenta#on/Plugin_Framework • nOSGi: • www.uni-­‐ulm.de/in/vs/proj/nosgi/ • SOF: • sof.#ddlyspot.com/