<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>Wow, we're on a roll right now! Thanks, Michiel de Jong!</div><div><br></div><div>I got Jonas's email while drafting the following and decided to send it as-is:</div><div><br></div>On Feb 16, 2011, at 1:14 PM, Bjarni Rúnar Einarsson wrote:<br><br><blockquote type="cite">I think you just hit the nail on the head with the word leadership. This project desperately needs someone to just take control and make something&nbsp;happen.<br></blockquote><div><br></div><div>My crazy initial plan was to lone-wolf-sprint a technologically-opiniated, coherent, multi-app attempt and BDFL it. I wasn't&nbsp;arrogant enough to want it to be THE freedom box distro, but rather one of several coherent technology experiments which the main FB organizations could draw from as they see fit.</div><div><br></div><div>With compatible licenses (we're all&nbsp;<a href="http://en.wikipedia.org/wiki/Permissive_free_software_licence">permissive license</a>&nbsp;enthusiasts, I hope?), there could be a nice non-zero-sum landscape of coherent-FB-tech-attempts-with-differing-opinions who draw from each others' components and code freely.</div><div><br></div><div>...but:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>My attempt wouldn't have become awesome for at least a few months</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>This list and the FOS-SAAS movement are gaining momentum right now</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>I'll be be working on these components with or without y'all, but much preferably with</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>...so if the following components overlap with your own interests, great!</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>...Saturday hack-a-thons, anyone?</div><div><br></div><div>A quick, rough attempt at a writeup:</div><div><br></div><div>Technologically-opiniated:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">        </span>B</span>ackend language/engine:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Nothing but {NodeJS/Coffee, C modules when needed}</div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>If you're not a NodeJS/Coffee enthusiast yet</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span><a href="http://s3.amazonaws.com/four.livejournal/20091117/jsconf.pdf">Ry's&nbsp;<span class="Apple-tab-span" style="white-space:pre">2009 JSConf slides</span></a></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">                        </span></span><a href="http://nodejs.org/jsconf2010.pdf"><span class="Apple-tab-span" style="white-space:pre">R</span>y's&nbsp;2010 JSConf slides</a></div><div><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre">                        </span><a href="http://www.youtube.com/watch?v=F6k8lTrAE2g">Ry's&nbsp;Google Tech Talk</a></div><div><span class="Apple-tab-span" style="white-space:pre">                        </span><a href="http://coffeescript.org">CoffeeScript.org</a></div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>Note: NodeJS uses Google's V8 engine, which supports {x86, x64, ARM}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">        </span>N</span>icely packaged:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>...with an&nbsp;<a href="http://github.com/isaacs/npm/blob/master/doc/developers.md#readme">NPM package.json</a></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">                </span>M</span>ay require:</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>Debian/Ubuntu packages (libraries/programs/data only -- nothing that automatically does stuff in the background!)</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span><a href="http://npm.mape.me/">NPM packages</a></div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">                </span>T</span>he main file will be ./app.coffee</div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">                </span>I</span>ts module.exports is set to a function ((app) -&gt; ...add stuff to app...)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>...where app is an&nbsp;<a href="http://expressjs.com/">Express</a>&nbsp;app</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Storage/servers/services:</div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">                </span></span></div><div><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre">                </span>Apps will specify abstractly what sort of datastores ("buckets"?) they want, and connection objects will be given to them at runtime</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>(with .get(k), .set(k, v), ...)</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>(keys and values are arbitrary byte-strings)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space: pre; "><span class="Apple-tab-span" style="white-space: pre; ">                </span>{T</span>CP,UDP} servers:</div><div><span class="Apple-tab-span" style="white-space: pre; ">                        </span>Apps will not create their own servers (<a href="http://nodejs.org/docs/v0.4.0/api/net.html#net.Server">TCP example</a>,&nbsp;<a href="http://nodejs.org/docs/v0.4.0/api/dgram.html#dgram.bind">UDP example</a>)</div><div><span class="Apple-tab-span" style="white-space: pre; ">                        </span>...they'll just describe the servers they want and define their callbacks</div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">                </span></span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">                </span></span><span class="Apple-tab-span" style="white-space: pre; ">D</span>etails will be managed by the admin-app</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>(e.g. assigning/managing prefixes, tracking bucket usage stats, ...)</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>(e.g. ports, domains, SSL, ...)</div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">                </span></span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">                </span></span>Some types of datastores:</div><div><span class="Apple-tab-span" style="white-space: pre; ">                        </span>Something with {...everything that Redis 2.2 offers...}</div><span class="Apple-tab-span" style="white-space: pre; ">                        </span>Something with {get,set,del}{,Range}<br><span class="Apple-tab-span" style="white-space: pre; ">                                </span>(so you can read&nbsp;a range of items without HD seeks)<div><span class="Apple-tab-span" style="white-space: pre; ">                                </span>e.g.&nbsp;<a href="http://fallabs.com/tokyotyrant/">Tokyo Tyrant</a>,&nbsp;<a href="http://cassandra.apache.org/">Cassandra</a>, ...</div><div><span class="Apple-tab-span" style="white-space: pre; ">                                </span>Note: check out&nbsp;<a href="http://keyjson.org">http://keyjson.org</a></div><div><div><div><div><span class="Apple-tab-span" style="white-space: pre; ">                        </span>Something with {get, set, del}</div></div></div></div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>e.g. S3</div><div><span class="Apple-tab-span" style="white-space: pre; ">                        </span>Temporary directory&nbsp;on a local filesystem</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>Use this as a last resort</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>Specify a space quote</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>...e.g. so the system could give use a RAM disk if possible&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">                </span></span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">                </span>N</span>oSQL only</div><div><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre">                        </span>Redis + KV-stores-with-ranges "ought to be enough for anybody"</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>(Redis Diskstore) and (Redis Cluster) will be here soon!</div><div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Arbitrary stuff can go on under the hood without the apps caring</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>Example:</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>There could be thousands of buckets using the same Redis server</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>...and each prefixes would be add/removed automatically</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>The prefix would probably be a&nbsp;<a href="http://msgpack.org/">msgpack</a>'d integer</div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-tab-span" style="white-space:pre">        </span></span></div><div><div><div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Client-side:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Must talk to the server over a stable, documented,&nbsp;<a href="http://semver.org/">semver</a>'d API</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>(so frontend devs can do their own attempt from scratch in a weekend without worrying about the backend)</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>(just the X and Y, not the Z: "/api/vX.Y/send-message.js")</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>May be written in anything that compiles to optimized {HTML,CSS,Javascript}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>(I'll be using Jade, Sass, CoffeeScript)</div><div><br></div><div><br></div><div>Components, Apps:</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>[ I'll put these in another email ]</div><div><br></div><br><blockquote type="cite"><br>Obviously it would be nice if that person worked openly and with the group, and it would be nice if that person had help and didn't have to do everything,&nbsp;but someone needs to lead the way. I think - hope - Eben actually recruited someone for this as part of creating the Foundation (perhaps not particularly&nbsp;democratic, but I for one will be glad). We'll find out in a few days, is my guess!<br><br>My tiny contribution to this, PageKite, is making good progress and I hope to have actual Debian packages built within a couple of months. The Wiki has&nbsp;more on it than it used to... there are lots of quiet little things happening. But while the system doesn't really have a leader and some sort of over-all&nbsp;architecture, we don't even know if these things will be used or not.&nbsp;<br><br>&nbsp;:-)<br><br>--&nbsp;<br>Bjarni R. Einarsson<br>The Beanstalks Project ehf.<br><br>Making personal web-pages fly:&nbsp;<a href="http://pagekite.net/">http://pagekite.net/</a><br>_______________________________________________<br>Freedombox-discuss mailing list<br>Freedombox-discuss@lists.alioth.debian.org<br>http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss<br></blockquote><br></div></div></div></body></html>