Goophy
Status: In Development - Developed in: C
Goophy is a Gopher server made in C. If you don't know what Gopher is you can checkout my article1 about it or visit the Wikipedia page about the Gopher protocol2.
Currently the project is in development and I'm the only user of it. When I feel it's complete enough I'll release a version in this page. In the meantime you can see the progress in the Devlog below.
Devlog
This Devlog started on Mastodon3 but I think it has to be here in its own project page and I'll also continue to update the thread on Mastodon. Posts on dates until August 31, 2025 are arranged from the original ones on Mastodon.
August 2, 2025
First steps of the project, a Gopher server in C called Goophy. I'm making it for educational purposes and to use it myself in the (near?) future.
The test client is elpher4 a gopher / gemini client for emacs.
August 7, 2025
More progress done. Some code refactor here and there, some security things like avoiding access to not authorized files and paths, gophermaps already supported… not bad at all.
Funny story of the day: I was testing the program and I was excited because everything worked fine. Suddenly I realized a thing was working but it shouldn't. Why was it working? Because the data I was using didn't cover that specific use case yet.
August 11, 2025
You know you're not making any progress if you don't get a Segmentation Fault once in a while ^^
August 12, 2025
You also know you're making progress when valgrind output looks like this:
  ==32514== All heap blocks were freed -- no leaks are possible
  ==32514== 
  ==32514== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Stay tuned, later in the day I'll show you current project status
August 12, 2025
As promised, here we go: Goophy in action. As you can see it's approaching an usable status.
Next steps: refactor more code, add a logging system and start my own gopherhole to test it in a real case scenario.
August 13, 2025
Today there was not much progress. A bit of refactor and handling returning errors to the connected client in case of malformed requests, not found paths, and the like. Anyway little progress is better than no progress.
August 15, 2025
Fixed my very first "buffer underflow" since the 90s ^^, refactored and improved code readability, doc comments, etc. I'm quite happy with the current status.
Next step: adding the logging system and removing all the debugging prints. Maybe I'll continue later, who knows… ;-)
August 18,2025
First version of the logging system almost finished. I have to fix a few formatting things but I have a working logfile. Almost all of the debug printf have disappeared.
Augut 19, 2025
Finally I have a working logging system. Yesterday I had almost completed a first version but today I thought, wouldn’t it be better if…? And I jumped at it.
There is room for improvement but I'm quite happy with it right now. I hope to have my private beta ready this week.
 
August 21, 2025
- Today I'm working on a config file system for the server. We will see how it goes
- Mission accomplished! Config file works as expected and with this I'm ready for a first private beta. Next step: installing NetBSD on my Raspberry Pi 2 for putting this online and see what happens.
August 22, 2025
Today I'm wearing the sysop hat. I've installed NetBSD on my Raspberry Pi 2. The docs from NetBSD5 are good enough and the installation was smooth. I'm not a serious NetBSD user and almost everything is new to me.
I read the npf docs6 in order to setup the firewall. I managed to have it running for my basic needs and I had to rebuild the kernel because I'm using the experimental wg7 feature in order to make it work with my Debian VPS with wireguard. Everythings works like a charm, not bad for a NetBSD noob ;-)
Here you have a shot of the server where Goophy will run.
 
I recompiled Goophy directly on the Pi and I also installed Lagrange8 on my desktop to test everything with a second client. Devuan GNU+Linux has no package for Lagrange so I built it from sources.
August 24, 2025
A new gopher hole and gopher server are born!!
Finally the first private beta of Goophy is up and running on the Raspberry Pi with NetBSD. You can check it out with your favorite gopher client at: gopher://lucio.albenga.es
I promise I'll put more content in the following days, but right now I'm excited to have it online ^^ Let me know if you find any bugs.
August 26, 2025
After almost 2 days online I can say that Goophy is doing well. I already have my gopherhole with more content online and I made it bilingual English / Spanish but I don't plan to keep 1-1 translations of everything. We will see.
 
Currently I already found some new features I want to add and some fixes to do but all in all I'm happy with this first beta version.
August 31, 2025
This morning I found out that Goophy was down. Checking the logs in search of bugs to fix. In the meantime I restarted the server and is working right now.
September 2, 2025
- Working on fixing and improving things on Goophy. Time for another coffee. After all programming is the process of inputting caffeine and outputting software ☕ ➡️ 🧠 ➡️ 🖥️ 😆
- New version of Goophy up and running my gopher hole.
Today:
- Fixed a few bugs. I hope it will no longer dies. Ok it only happened twice, but one time is already too much for my taste.
- Improved the logs.
- Allowed some requests to pass, according to what I've seen in the logs.
- Improved requests validation according to what I've seen in the logs. Requests like http are detected early so there is less waste of resources.
 
September 15, 2025
The microSD of the Pi died. It was an old microSD. Goophy has worked fine since the last update so I moved it directly to the VPS until I buy a new microSD and set it up.
October 30, 2025
Time to resume the development of this project. Phil of Nagatha9 was very kind and sent me some reports these last few days and I started by tackling these. At first it seemed that Goophy was too attached to the RFC and when a request doesn't end with cr-ln it returns an error. I thought of making it less picky.
After making the changes in order to accept also the new line character only as the request end character, I was testing it in production and after some tests it seemed clear to me that the problem was not about the end sequence but about getting the request in full when the network lags.
I reverted the changes and improved the code for retrieving the network requests. I also improved the debugging log messages to make my life easier and because the log messages were the reason I thought the error was about the line endings.
Currently it seems everything works fine and that I was right and it was a network programming problem instead of Goophy being too picky. We'll see. The new version is in production right now.