Skip to content

Instantly share code, notes, and snippets.

@lmorchard
Created January 13, 2020 20:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lmorchard/081101e505ad1442305da91dccc405ec to your computer and use it in GitHub Desktop.
Save lmorchard/081101e505ad1442305da91dccc405ec to your computer and use it in GitHub Desktop.
Hub of Awesome (decafbad.com/2012/02/hub-of-awesome.md)

Hub of Awesome

by Les Orchard me@lmorchard.com

Overview

People access the internet through a growing variety of devices, and many people use many devices. And, largely, those devices coordinate through the cloud.

Firefox as a product tracks this by way of mobile and sync efforts. However, whereas users can run Firefox on hardware and networks they control with relative ease, the growing suite of cloud services are not as easily owned and operated by end-users.

With User Sovereignty in mind, as well as the capability to apply that on a global scale, it doesn't seem like Mozilla has (or should have) the capacity or mission mandate to be the sole "open", "free", or "user-oriented" cloud services provider for the world.

This document, then, proposes a new product: The Hub of Awesome. This product would be an assemblage of essential cloud services needed by core Mozilla products, packaged in a way that empowers end-users to self-host the services as easily as they would install and use Firefox.

That's the goal, at least. It might even be feasible. But, it could use more thought, and a better name.

Goals

Primary

  • Sync
  • Notifications
  • remoteStorage
    • Think unhosted, rather than Dropbox
    • Not as much for big documents as for cross-device, non-volatile HTML5 app storage
  • Server-side Livemarks
    • Bookmarks that maintain long-term relationships with sites and content.
    • JSON Activity Streams, RSS feeds, and Atom feeds
    • PubSubHubbub and rssCloud
    • Need server-side HTML5-based UI for bookmark management?
  • Identity
    • BrowserID (?)
    • Contacts (?)
    • WebFinger (?)

Secondary

  • Simple appliance, real or virtual
    • Plug-and-play installation
    • Minimal, automated maintenance and updates
    • Web-based UI
  • Server-side "apps" or "add-ons" platform (?)
    • Expandability
    • Ideally, though, this hub offers enough services to power just about any client-side app.

Deployment Targets

Basically, anywhere there's an always-on, stationary CPU with net access. This should be a lightweight thing with respect to CPU and memory use. A few gigs of storage are probably required, depending on the base OS and volume of sync data.

  • Taskbar or menu resident app for fixed desktop PCs
  • Cheap sub-$100 (or sub-$50) plug computer
  • Custom router firmware
  • Free or inexpensive 3rd party hosting
    • VM on Amazon EC2, Rackspace Cloud, etal
    • Simple signup-and-go services
  • Hosted by Mozilla

General Principles

  • Open source software stack
  • Minimum server functionality needed to power client-side smarts.
    • Especially if the client-side smarts consist of an HTML5 app, which could be served up by the hub but executed client-side.
  • Single-URL configuration
    • One URL to a doc listing URLs and templates to all available services.
    • Would something like Sync's "add a device" PAKE process help?
  • REST APIs
    • Stay stateless, lightweight, uniform
    • Use HATEOS to link to services on different hosts / base URLs
  • For personal / private data only
    • This is not intended to be a personal webhost, but a personal cloud hub
    • Publishing to the public web happens on a scalable, high-availability host like Amazon S3, Rackspace, Dropbox, NearlyFreeSpeech, etal.
    • WebFinger maybe an exception, but probably not.
    • Use HTTPS, firewalling, tunnelling, etc

Parts List

  • Linux (embedded?)
  • Python and/or Node
  • NAT traversal
    • UPnP?
    • Port forwarding?
    • Mozilla-hosted PageKite?
  • Zero-config?
    • Use Rendezvous / ARP / etc to detect on a LAN
    • Server can redirect to external URL available through forwarding

See Also

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment