# -*- mode: org; org-html-inline-images: nil; -*- #+TITLE: Can distros make the link? #+AUTHOR: Deb Nicholson & Christopher Allan Webber #+EMAIL: press@mediagoblin.org #+DATE: 2015-02-01 Sun #+OPTIONS: reveal_center:t reveal_progress:t reveal_history:nil reveal_control:t #+OPTIONS: reveal_mathjax:t reveal_rolling_links:t reveal_keyboard:t reveal_overview:t num:nil #+OPTIONS: reveal_width:1200 reveal_height:800 #+OPTIONS: toc:nil #+REVEAL_MARGIN: 0.075 #+REVEAL_MIN_SCALE: 0.5 #+REVEAL_MAX_SCALE: 2.5 #+REVEAL_THEME: night #+REVEAL_HLEVEL: 2 #+REVEAL_HEAD_PREAMBLE: # Database: Dish # Application: Banana # Packaged application: peeled/sliced banana # Web server: Ice cream # SSL/DNS: Fudge # Container: Walnuts (optional) # Configuration management: Whipped cream # GUI: Cherry on top * Introductions # TODO: pictures of Deb & Chris ** Why should you care about decentralized web services? # - Why should you care? #+BEGIN_NOTES *Deb:* If everyone was using free and decentralized web services, then they would be awesome and exciting Also maybe even well-funded and therefore more robust! #+END_NOTES ** What's the goal? #+BEGIN_NOTES *Deb:* - We'd like deploying free network services to be "as easy as" =sudo package-manager install mediagoblin= or similar GUI experience. - Many end-users do not like "compiling from source" And actually just won't do it - Even tech-savvy end-users want to be on the same social network(s) as these folks because they include family, colleagues, college friends, neighbors, etc. - And/or don't want to sysadmin everything for their entire family #+END_NOTES * Packaging / how it can help! #+REVEAL_HTML: #+BEGIN_NOTES *Deb:* So, Chris tell me the quest to package free software web apps so far. - Starting out, package free software webapps! - Per-language packaging sucks - Let's look at MediaGoblin's case - Yeah! Get webapps packaged! Almost... there are issues. Namecheck people who are helping! #+END_NOTES ** So, talk over right? #+BEGIN_NOTES *Deb:* Just package it for the the distros and then were done! Maybe we could crowd fund it! Talk over, right? *Chris:* Grimace! Getting libre web applications packaged is a good first step, but not enough sadly. #+END_NOTES # TODO: Add rainbow from crowdfunding talk * What's needed? #+BEGIN_NOTES Storage? Or other issues? #+END_NOTES ** Email #+BEGIN_NOTES *Chris:* Well, let's take the example of email *Deb:* What's the problem, email is old, we've got that packaged right? How do you run your email setup? *Chris:* *lists out apocolyptic list of configuration steps* So... Email serving is a PITA because of all the post-installation configuration for verification, security and hooking into various protocols? #+END_NOTES ** Whew! #+BEGIN_NOTES So, how can we transition that to libre webapps *Deb:* So does this also apply to web applications, like those trying to replace google docs, facebook etc, stuff like diaspora and mediagoblin and blah blah *Chris:* Well yes, I think that packaging alone doesn't really solve things for a bunch of these things... a significant portion has to do with configuration *Deb:* Well, what do you mean by that? #+END_NOTES ** Configuring your application #+REVEAL_HTML: #+BEGIN_NOTES *Deb:* Configuring the application *Chris:* - Oh god web applications seem to have so much configuration stuff! - Of course, we have debconf and friends *Deb:* So the installer needs to "touch" all these options? What would happen if they didn't? *Chris:* Minimalist configuration, basic assumptions, this has gotten us pretty far, but... #+END_NOTES ** Configuring the web server #+REVEAL_HTML: #+BEGIN_NOTES *Deb:* so you just fill in those variables and then it's ready for the web? *Chris:* Hooking it up to apache/nginx - Do we need to provide both? Not to mention... --v #+END_NOTES *** SSL and DNS and friends #+REVEAL_HTML: #+BEGIN_NOTES SSL, DNS and friends are extra tricky because you're not only configuring your web application and web server, you're configuring those in coordination with an external service, which is usually a very manual process. And of course you have to constantly keep the database current... #+END_NOTES ** The database and migrations #+BEGIN_NOTES *Deb:* Wait, don't databases update themselves like other apps? *Chris:* - Migrations two ways that databases don't update themselves #+END_NOTES ** Multi-instance config #+BEGIN_NOTES *Deb:* What if I just asked my friend Chris to run my instance on his machine along with his own instance? Two birds, one stone right? *Chris:* Multiple instance deployment makes all the above even harder #+END_NOTES ** Keeping it up to date #+BEGIN_NOTES *Deb:* But at least once it's set up it's great, right? *Chris:* - Keeping all your machines up to date - What do you do when the next heartbleed happens? - Right so, intrusion detected, but you have no idea how much has been done? - Maybe everything just broke - Maybe you got a new server and need to move things #+END_NOTES ** Wow! Are we depressed yet? #+BEGIN_NOTES *Chris:* Sorry. I didn't do this talk just to convince you there isn't a solution :) *Deb:* Are you sure? JK. #+END_NOTES # TODO: Put Zippy here * Things that might help ** Containers #+REVEAL_HTML: #+BEGIN_NOTES *Deb:* So if installing things is hard, and keeping things secure is hard, could containers help? *Chris:* Containers? Probably! If they can help with deployment and security... - Docker, the land of one gigabyte per binary #+END_NOTES ** Configuration abstraction layers #+REVEAL_HTML: #+BEGIN_NOTES *Deb:* Well, what about devops super-tools like Salt, Ansible, Puppet, Chef, etc? Could that help? *Chris*: I don't think this is a full solution on its own Designed more for sysadmins at corporations who have resources to learn/keep up to date, not really designed for "end users" / user freedom side But! I think that's a good direction to learn from #+END_NOTES ** Make it more GUI friendly? #+REVEAL_HTML: #+BEGIN_NOTES *Deb:* Maybe one of those systems could be made more GUI or user-friendly? Like a wordpress plugin? - GUI systems *on top of* config management systems - Yes, if you built an abstract concept or "recipes" that had slots you could fill in, I think this could work, esp if they were able to share some config information (will rant my ideas at the end with userops) - Distro people themselves talking about it http://lists.alioth.debian.org/pipermail/webapps-common-discuss/2014-August/000317.html #+END_NOTES * Incomplete solutions with good ideas #+BEGIN_NOTES *Deb:* So just to recap what *won't work* on it's own.... containers are too complex and simplified config mgt which doesn't exist yet? - Insufficient on their own solutions - Containers alone will not fix it - Ansible/Puppet/Etc will solve it Too corporate/devops focused #+END_NOTES # TODO: Chris, reformulate thoughts here * Solutions to explore? #+BEGIN_NOTES Transition to some working solutions. call to action #+END_NOTES ** Config systems with recipes # TODO: Put swedish chef image here #+BEGIN_NOTES Deb: Maybe there's space for a new thing that we haven't seen yet? Chris: - "devops" is focused on developers, usually ones working for large companies - you *can* use them for user-oriented stuff, but you still need to be a developer, and even for individual developers, not really optimized for it - Really no nice way to "share" common config/deployment patterns, "dump it on github" doesn't help and just leads to a spaghetti mess #+END_NOTES *** devops -> "userops" # TODO: instant cake mix #+BEGIN_NOTES - So, a Recipe system? - If you took configuration management systems and added user-defined variables that were set'able via a user interface, maybe that would help so you can "fill in" those bits - Especially if recipes could require other recipes, and be able to read from each others' configurations, maybe we could handle the complexity of nginx needing to know about mediagoblin and mediagoblin needing to know about your mail config - And if that was contained in a common repository, as a "layer above distro packaging", maybe we could have a meta-distribution of server configuration, and I think maybe this is a thing distros could actually do #+END_NOTES ** Functional distros: Guix/Nix #+BEGIN_NOTES - Guix / Nix: a different distro direction - I guess maybe not a complete solution more than devops is, but I'm excited about exploring this direction - The ability to do deployment in ways where you can roll forward and back seems exciting - Of course, "functional programming" is notoriously hard to describe to people not already into functional programming. - We need a user story that's clearer than any of the existing explainations of how monads work #+END_NOTES ** Sandstorm # TODO: Add sandstorm image here #+BEGIN_NOTES Some interesting things: - Does have a web interface for one-click install, we even added this to mediagoblin.org's frontpage - Container based, and it's easy to build the applications' containers - User writes user-specific stuff to /var/ which is *not* stored in the container - So to upgrade, you just switch out the container, and the user's important stuff is in /var/ Still some downsides: - Some iframe weirdness - Capability security can add some weird constraints - Kind of the uncanny valley of deployment, but But! They hired Asheesh, and that makes me more confident than anything #+END_NOTES # TODO: Flesh out # https://demo.sandstorm.io/appdemo/70awyqss6jq2gkz7dwzsnvumzr07256pzdt3hda9acfuxwh6uh7h ** Finally: experiment! #+BEGIN_NOTES Best chance of success is if distros help exploring deploying to servers That means experimenting #+END_NOTES : ,------------------------------------, : | GNUTOP | : | .--------------------------------. | : | | , / \ | | : | | |\| | | | : | | [/usr/lib]$ make the_future ; | | : | | \ //-, ,-\\ ,/ | | : | | '.( o )'----'( o )./ / | | : | | ; '-' '-' ; | | : | | \ / | | : | | \ '-.___, / | | : | | \ / | | : | | ', ,' | | : | | ,.-'-.__.-'-., | | : | | /\ /\ | | : | '--------------------------------' | : ;'----------------------------------'; : / ,-,-,-,-,-,-.-.-.-.-.-.-.-.-.-.--. \ : / -'-'-'-'-'-'-''-'-'-''-'-'-'-'-'--' \ * Credits - "Crème Chantilly" (whipped cream) by Paul Downey (CC BY 2.0): https://en.wikipedia.org/wiki/Whipped_cream#mediaviewer/File:Cr%C3%A8me_Chantilly.jpg - "Maraschino Cherries" by Windy Wingers (CC BY 2.0): https://www.flickr.com/photos/windywinters/3768609310 - "Ghirardelli Banana Split" by Sodanie Chea (CC BY 2.0): https://www.flickr.com/photos/sodaniechea/8010244504 - "Homemade Hot Fudge Sauce 4" by Katie (CC BY 2.0): https://www.flickr.com/photos/61192399@N04/9309721730 ** Credits (cotd.) - "Fresh strawberry ice cream" by Joy (CC BY 2.0): https://www.flickr.com/photos/joyosity/3541994035 - "Whole Walnut Kernel" by Lawrencekhoo (CC BY-SA 3.0): https://commons.wikimedia.org/wiki/File:Whole_Walnut_Kernel.jpg - "Banana - Isolated" by robin_24 (CC BY 2.0): https://www.flickr.com/photos/robin24/5129712590 - "Peeled Banana" by Dan Foy (CC BY 2.0): https://www.flickr.com/photos/orangeacid/212833718 * Thanks! #+REVEAL_HTML: Let's package the customizable free software web of the future!* Talk released under CC BY-SA 4.0 International. Contact us: - *Deb Nicholson:* [[mailto:deb@eximiousproductions.com][deb@eximiousproductions.com]] - *Christopher Webber:* [[mailto:cwebber@dustycloud.org][cwebber@dustycloud.org]] - *MediaGoblin:* http://mediagoblin.org/ : * -- and add abstraction layers so this stuff is easy for users