How I wish SOPML would catch on. [Sigh]
by Dave Jones

Dave Jones
  • Microblog
  • Freedom Controller
  • Twitter
  • Microblog Feed
  • Podcast Feed
  • When we first started working on Freedom Controller back in 2012, the idea was to create a distributed social network. People could run their own FC server. Each server would then be able to handle hundreds of user accounts, each with his/her own microblog feed. Each server would talk to the others in the network to be able to search for user accounts on other servers in a crawling type fashion.
  • The crazy part is that it actually works. To this day, it works.
  • As best I can tell there are a dozen or so Freedom Controller servers out there running at any given time. I can see them querying my server every hour to keep current. This means they follow one of my server's user's SOPML files since a server only pings another server if at least one of it's users follows the SOPML file of a user on the other server.
  • And, that brings me to the SOPML spec. I've tried to evangelize it over the years as a simple way to publish all of your various RSS feeds in one place. It's so simple. You just take a standard OPML subscription list containing the feeds you publish and add an extra sopml:disposition="pub" attribute to each feed line if it's a feed you author. This would tell other aggregators that it's a feed that you publish. Not a feed that you follow.
  • Voila! You have just given the world one place to be able to subscribe to all of your feeds. This one file holds your social graph. Your follower's aggregators can just re-parse this file from time to time - following new sopml:disposition="pub" feeds as they appear in your SOPML file. Join a new social network and want your microblog followers to automatically follow it? Just put it in your SOPML outline and you're done.
  • Sure, there are things in the spec that are no longer really necessary. But the general idea is still as sound and as simple as ever.
  • Click this text to expand and see what an SOPML outline looks like.
    • 
          <?xml version="1.0" encoding="ISO-8859-1"?>
              
          <!-- OPML generated by Freedom Controller v0.6.12 on Fri, 16 Dec 2016 03:42:33 +0000 -->
              
          <opml version="2.0" xmlns:sopml="http://v1.sopml.com/">
      
              <head>
      
                  <title>Dave Jones's Social Outline</title>
                      
                  <dateCreated>Fri, 16 Dec 2016 03:42:33 +0000</dateCreated>
                      
                  <dateModified>Fri, 16 Dec 2016 03:42:33 +0000</dateModified>
                      
                  <ownerName>Dave Jones</ownerName>
                      
                  <sopml:url>http://dave.sobr.org/sopml.opml</sopml:url>
                      
                  <sopml:avatar>http://dave.sobr.org/avatar/20140416042308_dave-portrait_256.jpg</sopml:avatar>
                                          
          </head>
              
          <body>
      
              <outline text="My Stuff">
      
                  <outline text="Dave says..." description="Dave says..." type="rss" xmlUrl="http://dave.sobr.org/microblog.rss" htmlUrl="http://dave.sobr.org/microblog.html" sopml:disposition="pub" sopml:contains="mixed" />
                      
                  <outline text="Twitter / southern__bread" type="rss" description="" xmlUrl="http://api.twitter.com/1/statuses/user_timeline.rss?screen_name=southern__bread" htmlUrl="http://twitter.com/southern__bread" sopml:disposition="pub" sopml:contains="mixed" />
                      
                  <outline text="Bleeding Ledge Blogcast" type="rss" description="" xmlUrl="http://dave.sobr.org/rss/DavesBlogcast-1454965964.xml" htmlUrl="http://blogcast.sobr.org" sopml:disposition="pub" sopml:contains="mixed" />
                      
                  <outline text="Disqus - Latest Comments for southernbread" type="rss" description="" xmlUrl="http://disqus.com/southernbread/latest.rss" htmlUrl="http://disqus.com/by/southernbread/" sopml:disposition="pub" sopml:contains="mixed" />
                      
                  <outline text="Uploads by Dave Jones" type="rss" description="" xmlUrl="http://gdata.youtube.com/feeds/base/users/mlorgrim/uploads?alt=rss&amp;v=2&amp;orderby=published&amp;client=ytapi-youtube-profile" htmlUrl="http://www.youtube.com/channel/UCn43tnN5ut4TDJib-fOXvSQ/videos" sopml:disposition="pub" sopml:contains="mixed" />
                      
                  <outline text="Dave Jones" type="rss" description="" xmlUrl="http://pinterest.com/southernbread0/feed.rss" htmlUrl="https://www.pinterest.com/southernbread0/" sopml:disposition="pub" sopml:contains="mixed" />
                      
                  <outline text="Dave Jones's SOPML work feed." type="rss" description="" xmlUrl="http://static.curry.com/worldoutline/davejones/rss.xml" htmlUrl="http://djwork.sopml.com" sopml:disposition="pub" sopml:contains="mixed" />
                      
                  <outline text="daveajones&amp;rsquo;s Activity" type="rss" description="" xmlUrl="https://github.com/daveajones.atom" htmlUrl="https://github.com/daveajones" sopml:disposition="pub" sopml:contains="mixed" />
                                  
              </outline>
                          
          </body>
              
          </opml>
              
  • For instance, I follow 3 different feeds by Marco Arment: his blog feed, his YouTube uploads feed, and the Accidental Tech podcast feed. I had to track each of these down individually. If he published his feeds as an SOPML graph I could have followed them all with one click. I'll never understand why this hasn't gotten more traction.