1 / 51

Why Open Source?

Why Open Source?. Karl Fogel. kfogel@opentechstrategies.com. What is Open Source?. Karl Fogel. kfogel@opentechstrategies.com. Open source software is software that may be modified and redistributed freely by anyone, with no restrictions on how the code may be

Download Presentation

Why Open Source?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Why Open Source? Karl Fogel kfogel@opentechstrategies.com

  2. What is Open Source? Karl Fogel kfogel@opentechstrategies.com

  3. Open source software is software that may be modified and redistributed freely by anyone, with no restrictions on how the code may be changed, the uses to which it may be put, or the parties with whom it may be shared.

  4. What does “open source” make you think?

  5. Open source software is commercial (COTS)

  6. Open source software is commercial (COTS)

  7. Open source software is commercial (COTS) • It's just not proprietary

  8. Open source software is commercial (COTS) • It's just not proprietary • No such thing as academic-only OSS

  9. Open source software is commercial (COTS) • It's just not proprietary • No such thing as academic-only OSS • No such thing as non-profit-only OSS

  10. Open source software is commercial (COTS) • It's just not proprietary • No such thing as academic-only OSS • No such thing as non-profit-only OSS • “Open source” same as “free software”

  11. Open source software is commercial (COTS) • It's just not proprietary • No such thing as academic-only OSS • No such thing as non-profit-only OSS • “Open source” same as “free software” • Copyleft vs non-copyleft (both qualify)

  12. Open source software is commercial (COTS) • It's just not proprietary • No such thing as academic-only OSS • No such thing as non-profit-only OSS • “Open source” same as “free software” • Copyleft vs non-copyleft (both qualify) • Lots of religious wars in open source

  13. Open source software is commercial (COTS) • It's just not proprietary • No such thing as academic-only OSS • No such thing as non-profit-only OSS • “Open source” same as “free software” • Copyleft vs non-copyleft (both qualify) • Lots of religious wars in open source • But not about the definition

  14. Open source software is commercial (COTS) • It's just not proprietary • No such thing as academic-only OSS • No such thing as non-profit-only OSS • “Open source” same as “free software” • Copyleft vs non-copyleft (both qualify) • Lots of religious wars in open source • But not about the definition • You open source your code, not your time

  15. Open source software is commercial (COTS) • It's just not proprietary • No such thing as academic-only OSS • No such thing as non-profit-only OSS • “Open source” same as “free software” • Copyleft vs non-copyleft (both qualify) • Lots of religious wars in open source • But not about the definition • You open source your code, not your time • You control your copies

  16. Open source software is commercial (COTS) • It's just not proprietary • No such thing as academic-only OSS • No such thing as non-profit-only OSS • “Open source” same as “free software” • Copyleft vs non-copyleft (both qualify) • Lots of religious wars in open source • But not about the definition • You open source your code, not your time • You control your copies

  17. A Plethora of Acronyms Free Software (Wait, that's not an acronym.) OSS Open Source Software F/OSS Free / Open Source Software FLOSS Free / Libre / Open Source Software

  18. In the beginning...

  19. $ ?

  20. ?

  21. // debug mode loads unminified scripts // assumes markup pulls in scripts under the path /servlet_name/script/ if (java.lang.System.getProperty("app.debug")) { var fs = require("fs"); var config = fs.normal(fs.join(module.directory, "..", "bjs.cfg")); app.mount("/script/", require("./autoloader").App(config)); // proxy a remote geoserver on /geoserver by setting app.proxy.geoserver to remote URL // only recommended for debug mode var geoserver = java.lang.System.getProperty("app.proxy.geoserver"); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { geoserver = geoserver + "/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass( {url: geoserver, preserveHost: true, allowAuth: true})); } } // Redirect requests for servlet name without a trailing slash. // Jetty does this automatically for /servlet_name, Tomcat does not. function slash(app) { return function(request) { var servletRequest = request.env.servletRequest; var pathInfo = servletRequest.getPathInfo(); if (pathInfo === "/") { var uri = servletRequest.getRequestURI(); if (uri.charAt(uri.length-1) !== "/") { var location = servletRequest.getScheme() + "://" + servletRequest.getServerName() + ":" + servletRequest.getServerPort() + uri + "/"; return { status: 301, headers: {"Location": location}, body: [] }; } } return app(request); }; }

  22. // debug mode loads unminified scripts // assumes markup pulls in scripts under the path /servlet_name/script/ if (java.lang.System.getProperty("app.debug")) { var fs = require("fs"); var config = fs.normal(fs.join(module.directory, "..", "bjs.cfg")); app.mount("/script/", require("./autoloader").App(config)); // proxy a remote geoserver on /geoserver // by setting app.proxy.geoserver to remote URL // only recommended for debug mode var geoserver = java.lang.System.getProperty("app.proxy.geoserver"); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { geoserver = geoserver + "/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass( {url: geoserver, preserveHost: true, allowAuth: true})); } }

  23. // debug mode loads unminified scripts // assumes markup pulls in scripts under the path /servlet_name/script/ if (java.lang.System.getProperty("app.debug")) { var fs = require("fs"); var config = fs.normal(fs.join(module.directory, "..", "bjs.cfg")); app.mount("/script/", require("./autoloader").App(config)); // proxy a remote geoserver on /geoserver // by setting app.proxy.geoserver to remote URL // only recommended for debug mode var geoserver = java.lang.System.getProperty("app.proxy.geoserver"); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { geoserver = geoserver + "/dennis-wuthrich/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass( {url: geoserver, preserveHost: true, allowAuth: true})); } }

  24. // debug mode loads unminified scripts // assumes markup pulls in scripts under the path /servlet_name/script/ if (java.lang.System.getProperty("app.debug")) { var fs = require("fs"); var config = fs.normal(fs.join(module.directory, "..", "bjs.cfg")); app.mount("/script/", require("./autoloader").App(config)); // proxy a remote geoserver on /geoserver // by setting app.proxy.geoserver to remote URL // only recommended for debug mode var geoserver = java.lang.System.getProperty("app.proxy.geoserver"); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { geoserver = geoserver + "/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass( {url: geoserver, preserveHost: true, allowAuth: true})); } }

  25. // debug mode loads unminified scripts // assumes markup pulls in scripts under the path /servlet_name/script/ if (java.lang.System.getProperty("app.debug")) { var fs = require("fs"); var config = fs.normal(fs.join(module.directory, "..", "bjs.cfg")); app.mount("/script/", require("./autoloader").App(config)); // proxy a remote geoserver on /geoserver // by setting app.proxy.geoserver to remote URL // only recommended for debug mode var geoserver = java.lang.System.getProperty("app.proxy.geoserver"); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { geoserver = geoserver + "/dennis-wuthrich/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass( {url: geoserver, preserveHost: true, allowAuth: true})); } }

  26. --- geoexplorer-app-main.js 2012-06-09 20:08:02 +++ geoexplorer-app-main.js 2012-06-09 20:08:12 @@ -12,7 +12,7 @@ var geoserver = java.lang.System.getProperty("...geo..."); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { - geoserver = geoserver + "/"; + geoserver = geoserver + "/dennis-wuthrich/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass(

  27. --- geoexplorer-app-main.js 2012-06-09 20:08:02 +++ geoexplorer-app-main.js 2012-06-09 20:08:12 @@ -12,7 +12,7 @@ var geoserver = java.lang.System.getProperty("...geo..."); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { - geoserver = geoserver + "/"; + geoserver = geoserver + "/dennis-wuthrich/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass(

  28. --- geoexplorer-app-main.js 2012-06-09 20:08:02 +++ geoexplorer-app-main.js 2012-06-09 20:08:12 @@ -12,7 +12,7 @@ var geoserver = java.lang.System.getProperty("...geo..."); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { - geoserver = geoserver + "/"; + geoserver = geoserver + "/dennis-wuthrich/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass(

  29. --- geoexplorer-app-main.js 2012-06-09 20:08:02 +++ geoexplorer-app-main.js 2012-06-09 20:08:12 @@ -12,7 +12,7 @@ var geoserver = java.lang.System.getProperty("...geo..."); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { - geoserver = geoserver + "/"; + geoserver = geoserver + "/dennis-wuthrich/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass(

  30. --- geoexplorer-app-main.js 2012-06-09 20:08:02 +++ geoexplorer-app-main.js 2012-06-09 20:08:12 @@ -12,7 +12,7 @@ var geoserver = java.lang.System.getProperty("...geo..."); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { - geoserver = geoserver + "/"; + geoserver = geoserver + "/dennis-wuthrich/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass(

  31. // debug mode loads unminified scripts // assumes markup pulls in scripts under the path /servlet_name/script/ if (java.lang.System.getProperty("app.debug")) { var fs = require("fs"); var config = fs.normal(fs.join(module.directory, "..", "bjs.cfg")); app.mount("/script/", require("./autoloader").App(config)); // proxy a remote geoserver on /geoserver by setting app.proxy.geoserver to remote URL // only recommended for debug mode var geoserver = java.lang.System.getProperty("app.proxy.geoserver"); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { geoserver = geoserver + "/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass( {url: geoserver, preserveHost: true, allowAuth: true})); } } // Redirect requests for servlet name without a trailing slash. // Jetty does this automatically for /servlet_name, Tomcat does not. function slash(app) { return function(request) { var servletRequest = request.env.servletRequest; var pathInfo = servletRequest.getPathInfo(); if (pathInfo === "/") { var uri = servletRequest.getRequestURI(); if (uri.charAt(uri.length-1) !== "/") { var location = servletRequest.getScheme() + "://" + servletRequest.getServerName() + ":" + servletRequest.getServerPort() + uri + "/"; return { status: 301, headers: {"Location": location}, body: [] }; } } return app(request); }; }

  32. // debug mode loads unminified scripts // assumes markup pulls in scripts under the path /servlet_name/script/ if (java.lang.System.getProperty("app.debug")) { var fs = require("fs"); var config = fs.normal(fs.join(module.directory, "..", "bjs.cfg")); app.mount("/script/", require("./autoloader").App(config)); // proxy a remote geoserver on /geoserver by setting app.proxy.geoserver to remote URL // only recommended for debug mode var geoserver = java.lang.System.getProperty("app.proxy.geoserver"); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { geoserver = geoserver + "/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass( {url: geoserver, preserveHost: true, allowAuth: true})); } } // Redirect requests for servlet name without a trailing slash. // Jetty does this automatically for /servlet_name, Tomcat does not. function slash(app) { return function(request) { var servletRequest = request.env.servletRequest; var pathInfo = servletRequest.getPathInfo(); if (pathInfo === "/") { var uri = servletRequest.getRequestURI(); if (uri.charAt(uri.length-1) !== "/") { var location = servletRequest.getScheme() + "://" + servletRequest.getServerName() + ":" + servletRequest.getServerPort() + uri + "/"; return { status: 301, headers: {"Location": location}, body: [] }; } } return app(request); }; }

  33. // debug mode loads unminified scripts // assumes markup pulls in scripts under the path /servlet_name/script/ if (java.lang.System.getProperty("app.debug")) { var fs = require("fs"); var config = fs.normal(fs.join(module.directory, "..", "bjs.cfg")); app.mount("/script/", require("./autoloader").App(config)); // proxy a remote geoserver on /geoserver by setting app.proxy.geoserver to remote URL // only recommended for debug mode var geoserver = java.lang.System.getProperty("app.proxy.geoserver"); if (geoserver) { if (geoserver.charAt(geoserver.length-1) !== "/") { geoserver = geoserver + "/dennis-wuthrich/"; } // debug specific proxy app.mount("/geoserver/", require("./root/proxy").pass( {url: geoserver, preserveHost: true, allowAuth: true})); } } // Redirect requests for servlet name without a trailing slash. // Jetty does this automatically for /servlet_name, Tomcat does not. function slash(app) { return function(request) { var servletRequest = request.env.servletRequest; var pathInfo = servletRequest.getPathInfo(); if (pathInfo === "/") { var uri = servletRequest.getRequestURI(); if (uri.charAt(uri.length-1) !== "/") { var location = servletRequest.getScheme() + "://" + servletRequest.getServerName() + ":" + servletRequest.getServerPort() + uri + "/"; return { status: 301, headers: {"Location": location}, body: [] }; } } return app(request); }; }

  34. $ ?

  35. ?

  36. Advantages of Open Source

  37. Advantages of Open Source • Avoid lock-in

  38. Advantages of Open Source • Avoid lock-in • Adaptability

  39. Advantages of Open Source • Avoid lock-in • Adaptability • Framework for collaboration

  40. Advantages of Open Source • Avoid lock-in • Adaptability • Framework for collaboration • Lower experimentation costs

  41. Advantages of Open Source • Avoid lock-in • Adaptability • Framework for collaboration • Lower experimentation costs • Talent discovery

  42. Advantages of Open Source • Avoid lock-in • Adaptability • Framework for collaboration • Lower experimentation costs • Talent discovery • Philosophical warm fuzzies

  43. Low-stakes governance • Responsibility flows in from the periphery • Pool of contributors • Expertise accummulates everywhere • No one can be alienated from their work • Commercial participation encouraged

  44. Open Source Software + = €$

  45. “Producing Open Source Software” producingoss.com

More Related