Using software modules welcome to hell!

604 views
506 views

Published on

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.

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
604
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
8
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Doc Brown predicts – even more usage of modules in the future!
  • Using software modules welcome to hell!

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

    ×