Update (2018-07-31): Libravatar is not going away
As noted on the official Libravatar blog, I will be shutting the service down on 2018-09-01.
It has been an incredible journey but Libravatar has been more-or-less in maintenance mode for 5 years, so it's somewhat outdated in its technological stack and I no longer have much interest in doing the work that's required every two years when migrating to a new version of Debian/Django. The free software community prides itself on transparency and so while it is a difficult decision to make, it's time to be upfront with the users who depend on the project and admit that the project is not sustainable in its current form.
Many things worked well
The most motivating aspect of running Libravatar has been the steady organic
growth within the FOSS community. Both in terms of traffic (in March 2018,
we served a total of 5 GB of images and 12 GB of 302
redirects to
Gravatar), integration with other sites and projects (Fedora, Debian,
Mozilla, Linux kernel, Gitlab, Liberapay and many others), but also in terms
of users:
In addition, I wanted to validate that it is possible to run a FOSS service without having to pay for anything out-of-pocket, so that it would be financially sustainable. Hosting and domain registrations have been entirely funded by the community, thanks to the generosity of sponsors and donors. Most of the donations came through Gittip/Gratipay and Liberapay. While Gratipay has now shut down, I encourage you to support Liberapay.
Finally, I made an effort to host Libravatar on FOSS infrastructure. That meant shying away from popular proprietary services in order to make a point that these convenient and well-known services aren't actually needed to run a successful project.
A few things didn't pan out
On the other hand, there were also a few disappointments.
A lot of the libraries and plugins never implemented DNS federation. That was the key part of the protocol that made Libravatar a decentralized service but unfortunately the rest of the protocol was must easier to implement and therefore many clients stopped there.
In addition, it turns out that while the DNS system is essentially a federated caching system for IP addresses, many DNS resolvers aren't doing a good job caching records and that created unnecessary latency for clients that chose to support DNS federation.
The main disappointment was that very few people stepped up to run mirrors.
I designed the service so that it could scale easily in the same way that
Linux distributions have coped with increasing user bases: "ftp" mirrors. By
making the actual serving of images only require Apache and mod_rewrite
, I
had hoped that anybody running Apache would be able to add an extra vhost to
their setup and start serving our static files. A few people did sign up for
this over the years, but it mostly didn't work. Right now, there are no
third-party mirrors online.
The other aspect that was a little disappointing was the lack of code contributions. There were a handful from friends in the first couple of months, but it's otherwise been a one-man project. I suppose that when a service works well for what people use it for, there are less opportunities for contributions (or less desire for it). The fact dev environment setup was not the easiest could definitely be a contributing factor, but I've only ever had a single person ask about it so it's not clear that this was the limiting factor. Also, while our source code repository was hosted on Github and open for pull requests, we never even received a single drive-by contribution, hinting at the fact that Github is not the magic bullet for community contributions that many people think it is.
Finally, it turns out that it is harder to delegate sysadmin work (you need root, for one thing) which consumes the majority of the time in a mature project. The general administration and maintenance of Libravatar has never moved on beyond its core team of one. I don't have a lot of ideas here, but I do want to join others who have flagged this as an area for "future work" in terms of project sustainability.
Personal goals
While I was originally inspired by Evan Prodromou's vision of a suite of FOSS services to replace the proprietary stack that everybody relies on, starting a free software project is an inherently personal endeavour: the shape of the project will be influenced by the personal goals of the founder.
When I started the project in 2011, I had a few goals:
I wanted to get experience with Python, Django, and Bazaar.
I wanted to speak at a Kiwi PyCon which I did, twice, but my Libravatar experience also led to speak at DebConf twice, linux.conf.au and OSCON.
Career-wise, I wanted to move beyond PHP development, which I successfully achieved by working for a new client while I was at Catalyst and then getting hired by Mozilla to work on Persona until it was de-staffed following a Mozilla reorg.
This project personally taught me a lot of different technologies and allowed me to try out various web development techniques I wanted to explore at the time. That was intentional: I chose my technologies so that even if the project was a complete failure, I would still have gotten something out of it.
A few things I've learned
I learned many things along the way, but here are a few that might be useful to other people starting a new free software project:
Speak about your new project at every user group you can. It's important to validate that you can get other people excited about your project. User groups are a great (and cheap) way to kickstart your word of mouth marketing.
When speaking about your project, ask simple things of the attendees (e.g. create an account today, join the IRC channel). Often people want to support you but they can't commit to big tasks. Make sure to take advantage of all of the support you can get, especially early on.
Having your friends join (or lurk on!) an IRC channel means it's vibrant, instead of empty, and there are people around to field simple questions or tell people to wait until you're around. Nobody wants to be alone in a channel with a stranger.
Thank you
I do want to sincerely thank all of the people who contributed to the project over the years:
- Jonathan Harker and Brett Wilkins for productive hack sessions in the Catalyst office.
- Lars Wirzenius, Andy Chilton and Jesse Noller for graciously hosting the service.
- Christian Weiske, Melissa Draper, Thomas Goirand and Kai Hendry for running mirrors on their servers.
- Chris Forbes, fr33domlover, Kang-min Liu and strk for writing and maintaining client libraries.
- The Wellington Perl Mongers for their invaluable feedback on an early prototype.
- The
#equifoss
group for their ongoing suppport and numerous ideas. - Nigel Babu and Melissa Draper for producing the first (and only) project stickers, as well as Chris Cormack for spreading them so effectively.
- Adolfo Jayme, Alfredo Hernández, Anthony Harrington, Asier Iturralde Sarasola, Besnik, Beto1917, Daniel Neis, Eduardo Battaglia, Fernando P Silveira, Gabriele Castagneti, Heimen Stoffels, Iñaki Arenaza, Jakob Kramer, Jorge Luis Gomez, Kristina Hoeppner, Laura Arjona Reina, Léo POUGHON, Marc Coll Carrillo, Mehmet Keçeci, Milan Horák, Mitsuhiro Yoshida, Oleg Koptev, Rodrigo Díaz, Simone G, Stanislas Michalak, Volkan Gezer, VPablo, Xuacu Saturio, Yuri Chornoivan, yurchor and zapman for making Libravatar speak so many languages.
I'm sure I have forgotten people who have helped over the years. If your name belongs in here and it's not, please email me or leave a comment.
Here is how I managed to get my Kenwood TH-D72A radio working with Pat on Linux using the built-in TNC and the AX.25 mode
Installing Pat
First of all, download and install the latest Pat package from the GitHub project page.
dpkg -i pat_x.y.z_amd64.deb
Then, follow the installation instructions for the AX.25 mode and install the necessary packages:
apt install ax25-tools ax25-apps
along with the systemd script that comes with Pat:
/usr/share/pat/ax25/install-systemd-ax25-unit.bash
Configuration
Once the packages are installed, it's time to configure everything correctly:
- Plug the radio onto the computer using a mini-USB cable.
- Power cycle the radio.
- Enable TNC in
packet12
mode (band A*). - Tune band A to VECTOR
channel 420
(or 421
if you can't reach
VA7EOC
on simplex). Put the following in
/etc/ax25/axports
(replacingCALLSIGN
with your own callsign):wl2k CALLSIGN 9600 128 4 Winlink
Set
HBAUD
to1200
in/etc/default/ax25
and make sure that theDEV
variable is set to the correct/dev/TTYUSBx
device (check the output ofdmesg
after turning on the radio).Download and compile the
tmd710_tncsetup
script mentioned in a comment in/etc/default/ax25
:gcc -o tmd710_tncsetup tmd710_tncsetup.c sudo cp tmd710_tncsetup /usr/local/bin
Note: on a Debian bullseye or later system, all you need to do is install the
tmd710-tncsetup
package:apt install tmd710-tncsetup
Add the
tmd710_tncsetup
script in/etc/default/ax25
and use these command line parameters (-B 0
specifies band A, use-B 1
for band B):/usr/local/bin/tmd710_tncsetup -B 0 -S $DEV -b $HBAUD -s
Note: the path is
/usr/bin/tmd710_tncsetup
if using the official Debian package.Start ax25 driver:
systemctl start ax25.service
As the AX25 unit starts up and initializes the TNC using tmd710_tncsetup
,
you should see STA
and CON
indicators flash briefly in the top-right
corner of the screen.
Connecting to a winlink gateway
To monitor what is being received and transmitted:
axlisten -cart
Then create aliases like these in ~/.wl2k/config.json
:
{
"connect_aliases": {
"ax25-VA7EOC": "ax25://wl2k/VA7EOC-10",
"ax25-VE7LAN": "ax25://wl2k/VE7LAN-10"
},
}
and use them to connect to your preferred Winlink gateways by starting pat using the following:
pat http
and then opening the interface in a webbrowser: http://localhost:8080/
Troubleshooting
If it doesn't look like ax25 can talk to the radio (i.e. the TX light
doesn't turn ON), then it's possible that the tmd710_tncsetup
script isn't
being run at all, in which case the TNC isn't initialized correctly.
On the other hand, if you can see the radio transmitting but are not seeing
any incoming packets in axlisten
then double check that the speed is
set correctly:
HBAUD
in/etc/default/ax25
should be set to 1200- line speed in
/etc/ax25/axports
should be set to 9600 SERIAL_SPEED
intmd710_tncsetup
should be set to 9600- radio displays
packet12
in the top-left corner, notpacket96
If you can establish a connection, but it's very unreliable, make sure that
you have enabled software flow control (the -s
option in
tmd710_tncsetup
).
If you can't connect to VA7EOC-10
on UHF, you could also try the VHF BCFM
repeater on Mt Seymour, VE7LAN (VECTOR
channel 65).