Using software modules   welcome to hell!
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Using software modules welcome to hell!

on

  • 555 views

Using software modules today is the default way of working for most systems and frameworks. With the advent of many software languages and OSS frameworks, new module systems are constantly created ...

Using software modules today is the default way of working for most systems and frameworks. With the advent of many software languages and OSS frameworks, new module systems are constantly created and new module ecosystems start to prevail. This trend is horizontal and covers operating system packages, language libraries and application modules (plugins). But while some module systems are nicer to use, others are repeating past mistakes and are a daily source for developer agony and pain. In this short talk I will present the \"lessons learned\" at JFrog, where we make software for managing software libraries and deal with many types of module systems. This talk will show what works and what doesn\'t work in a module system; what features can make a module ecosystem thrive or fail; and why, despite all downsides, modules are here to stay and conquer more space as the Cloud continues to grow.

Statistics

Views

Total Views
555
Views on SlideShare
555
Embed Views
0

Actions

Likes
1
Downloads
5
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Doc Brown predicts – even more usage of modules in the future!

Using software modules welcome to hell! Presentation Transcript

  • 1. Using Software Modules -Welcome to Hell!
  • 2. Who’s talking?2
  • 3. Agenda25 minutes125 slides30 memes
  • 4. Packages & ModulesModules Packages
  • 5. Packages & ModulesModules PackagesAPIdevelopment
  • 6. Packages & ModulesModules PackagesAPIdevelopmentInstallableruntime
  • 7. For the sake of this talk
  • 8. Modules, modules,modules
  • 9. Modules, modules,modulesSystem dpkg, RPM, tgz, pacman, ipkg, pkgutils, PETget,Upkg, PISI, nix, Equo, Conary, tazpkg, App Store,MacPorts, fink, Homebrew, Google Play, GetJar,Amazon Appstore, Cygwin, Npackd, Steam,Chocolately, NSIS, IPS
  • 10. Modules, modules,modulesSystem dpkg, RPM, tgz, pacman, ipkg, pkgutils, PETget,Upkg, PISI, nix, Equo, Conary, tazpkg, App Store,MacPorts, fink, Homebrew, Google Play, GetJar,Amazon Appstore, Cygwin, Npackd, Steam,Chocolately, NSIS, IPS
  • 11. Modules, modules,modulesSystem dpkg, RPM, App Store,Homebrew, Google Play,Steam
  • 12. Modules, modules,modulesSystem dpkg, RPM, App Store,Homebrew, Google Play,SteamDev. Cabal, Composer, CPAN, CRAN, Python eggs, Ivy,Maven, Gradle, sbt, leiningen, PyPI, NuGet,RubyGems, Quicklisp, CocoaPods
  • 13. Modules, modules,modulesSystem dpkg, RPM, App Store,Homebrew, Google Play,SteamDev. Cabal, Composer, CPAN, CRAN, Python eggs, Ivy,Maven, Gradle, sbt, leiningen, PyPI, NuGet,RubyGems, Quicklisp, CocoaPods
  • 14. Modules, modules,modulesSystem dpkg, RPM, App Store,Homebrew, Google Play,SteamDev. Ivy, Maven, Gradle, sbt,PyPI, NuGet, RubyGems,CocoaPods
  • 15. Modules, modules,modulesSystem dpkg, RPM, App Store,Homebrew, Google Play,SteamDev. Ivy, Maven, Gradle, sbt,PyPI, NuGet, RubyGems,CocoaPodsFrameworkRoR, Grails, jQuery, Node.js, Spring Roo, JBossForge, Play, Chef, Puppet, Eclipse
  • 16. Modules, modules,modulesSystem dpkg, RPM, App Store,Homebrew, Google Play,SteamDev. Ivy, Maven, Gradle, sbt,PyPI, NuGet, RubyGems,CocoaPodsFrameworkRoR, Grails, jQuery, Node.js, Spring Roo, JBossForge, Play, Chef, Puppet, Eclipse
  • 17. Modules, modules,modulesSystem dpkg, RPM, App Store,Homebrew, Google Play,SteamDev. Ivy, Maven, Gradle, sbt,PyPI, NuGet, RubyGems,CocoaPodsFrameworkRoR, Grails, jQuery,Node.js, Spring Roo, Chef,Puppet, Eclipse
  • 18. Modules, modules,modulesSystem dpkg, RPM, App Store,Homebrew, Google Play,SteamDev. Ivy, Maven, Gradle, sbt,PyPI, NuGet, RubyGems,CocoaPodsFrameworkRoR, Grails, jQuery,Node.js, Spring Roo, Chef,Puppet, EclipseApplicatio Any pluggable application!
  • 19. DRAGON STORIES AHEAD!fACDdb
  • 20. STORY NUMBER ONEf
  • 21. , A STORY OF INDEXES +
  • 22. , A STORY OF INDEXES +< KEPT IN WRONG PLACE >
  • 23. Once Upon A Time…
  • 24. Once Upon A Time…Can’tserve…searches…
  • 25. Not anymore…
  • 26. Look ma, no index download!
  • 27. - Have to download huge filesBefore Searching
  • 28. - Have to download huge filesBefore Searching- Updated rarely
  • 29. - Have to download huge filesBefore Searching- Updated rarely- Requires special client
  • 30. - Have to download huge filesBefore Searching- Updated rarely- Requires special client
  • 31. Who’s good, who’s not?NuGetRubyGemsDebRPMMaven
  • 32. Who’s good, who’s not?NuGetRubyGemsDebRPMMavenGoodExcuse:old tools
  • 33. Lesson learnedIndex on the server-side,expose query API
  • 34. STORY NUMBER TWOA
  • 35. Heinrich Heine
  • 36. Heinrich Heine
  • 37. STORY NUMBER TWO(AND A HALF)AA
  • 38. He cut his ear offand died unappreciated
  • 39. Lesson learnedAuthenticate by publicidentity;Give credit to thedeveloper
  • 40. Identified, credited. WellDone.
  • 41. STORY NUMBER THREEC
  • 42. Imagine a typical windowsuser
  • 43. Depending on name only
  • 44. Depending on name onlyWhere’s theversion,dude?!
  • 45. TIME FOR THE BOROMIRMEME!You knew it is coming!
  • 46. Single Namespace TroublesScope TroubleExamples Work-around
  • 47. Single Namespace TroublesScope TroubleExamples Work-aroundSystem Can’tusemultipleversions,updateall
  • 48. Single Namespace TroublesScope TroubleExamples Work-aroundSystem Can’tusemultipleversions,updateallRPMs,Ruby,Groovy
  • 49. Single Namespace TroublesScope TroubleExamples Work-aroundSystem Can’tusemultipleversions,updateallRPMs,Ruby,GroovyRVM, GVM,Homebrew
  • 50. Single Namespace TroublesScope TroubleExamples Work-aroundSystem Can’tusemultipleversions,updateallRPMs,Ruby,GroovyRVM, GVM,HomebrewPlatfor Classpa
  • 51. Single Namespace TroublesScope TroubleExamples Work-aroundSystem Can’tusemultipleversions,updateallRPMs,Ruby,GroovyRVM, GVM,HomebrewPlatfor Classpa Transitive
  • 52. Single Namespace TroublesScope TroubleExamples Work-aroundSystem Can’tusemultipleversions,updateallRPMs,Ruby,GroovyRVM, GVM,HomebrewPlatfor Classpa Transitive Uberjar
  • 53. Interlude…
  • 54. Maven’s Conflict ManagerA v1
  • 55. Maven’s Conflict ManagerA v1E v1
  • 56. Maven’s Conflict ManagerA v1E v1D v1
  • 57. Maven’s Conflict ManagerA v1B v1E v1D v1
  • 58. Maven’s Conflict ManagerA v1C v1B v1E v1D v1
  • 59. Maven’s Conflict ManagerA v1C v1B v1D v2E v1D v1
  • 60. Maven’s Conflict ManagerA v1C v1B v1D v2E v1D v1
  • 61. Maven’s Conflict Manager
  • 62. Maven’s Conflict Manager
  • 63. Maven’s Conflict Manager
  • 64. BOROMIR RETURNS!Reprise…
  • 65. Just not very usable…
  • 66. Lesson learnedProvide isolation andeasy uninstall
  • 67. STORY NUMBER FOUR
  • 68. Version ranges
  • 69. Stuff Suddenly stopsworking
  • 70. Lesson learnedRequire explicitdependency versions
  • 71. STORY NUMBER FIVED
  • 72. Likevodkaandbeer…
  • 73. …Config.andMetadata…
  • 74. …Justwon’tmix.
  • 75. So, a user had a project…
  • 76. MyProject‘A1’
  • 77. MyProject‘A1’<alwaysUse><repository>MyRepo</repository></alwaysUse>MyRepo
  • 78. MyProject‘A1’<dependency>B1</dependency><alwaysUse><repository>MyRepo</repository></alwaysUse>MyRepo
  • 79. MyProject‘A1’<dependency>B1</dependency><alwaysUse><repository>MyRepo</repository></alwaysUse>MyRepoProject‘B1’
  • 80. MyProject‘A1’<dependency>B1</dependency><alwaysUse><repository>MyRepo</repository></alwaysUse>MyRepoProject‘B1’BadRepo<repository>BadRepo</repository><dependency>C1</dependency>
  • 81. MyProject‘A1’<dependency>B1</dependency><dependency>C1</dependency><repository>MyRepo</repository><repository>BadRepo</repository>MyRepoProject‘B1’BadRepo
  • 82. MyProject‘A1’<dependency>B1</dependency><dependency>C1</dependency><repository>MyRepo</repository><repository>BadRepo</repository>MyRepoProject‘B1’BadRepo
  • 83. Lesson learnedDon’t mix vodka andbeer configuration andmetadata
  • 84. NO MORE STORIES,ONE MORE THINGOOOfACDdb
  • 85. Doc predicts
  • 86. All you need is cloud