Goophy Devlog ==================================================================== LFA | 2025-08-29 | #projects #goophy ==================================================================== If you read my first post, Hello World!, you already know that this gopher hole runs on Goophy, my own gopher server. I did the project for educational purposes and because I like to develop my own tools. Currently I'm running it in private beta because I'm testing and fixing it, seeing what new features pop up, etc. When I started the project I started, as an experiment, a devlog on Mastodon[1] and I think it would be nice to have it here too so here there is (I will continue to update this entry as Goophy development goes on). Goophy DevLog (last updated December 11, 2025) ---------------------------------------------- * August 2, 2025 First steps of a pet project of mine. 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 elpher 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 * August 21, 2025 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 23, 2025 Yesterday it was a lot of fun. I installed NetBSD on the Raspberry Pi 2 you see below. This machine is going to be the server for the beta testing of the project. There is a small thread on this here: https://hostux.social/@lfa/115072908838339673 I recompiled Goophy directly on the Pi and I also installed Lagrange on my desktop to test everything with a second client. Devuan 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 Nagatha[2] 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-lf 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. * October 31, 2025 This morning Phil did more tests with different clients (including gophercle for Android) and we found out that on one of his environments the client sends requests terminated with new line character only instead of cr-lf. Yesterday's improvements to the logging system turned out to be pure gold for today's tests. I added again the changes to accept requests terminated with cr-lf and with lf only and right now everything works like a charm. Phil's[2] help and support have been essential to improve Goophy and I want to thank him for his initiative and the time devoted to this :-) * October 31, 2025 21:30 UTC The reason of Phil's problem with the wrong request endings was a bug in Chawan. I reverted Goophy to the previous version in order to make possible to test the Chawan bugfix and I decided to leave Goophy with the request ending according to the RFC because I think it will be useful for other Gopher client devs. * November 24, 2025 Little by little I keep improving and adding things to Goophy. Right now I'm not in my best mood so I'm doing small things but it's better than nothing. Today I did minor code improvements here and there and refactored the function that sends the response to the client. This new version is up & running right now on this Gopher hole. If you find any problems while browsing, let me know. * December 9, 2025 I've found a use to the bad bots that scrape the internet 24/7. Finally my friends from China managed to break Goophy 😆 Because of it I've discovered a bug managing the max connections of the server. I knew I have a bug somewhere and I was waiting to find and fix it before continue to add new features and improvements. New version up and running. Let's see if my testers from China will find something else 😂 * December 11, 2025 Today I added new features to Goophy: - Keep alive config param in order to disconnect idle connections after the configured time. - Disconnect new connections on max connections reached until there is an available connection slot. New version up and running on this gopher hole. This will be the last version with all the code in one single file. It's time to refactor and split things. ______________________________________________________________________ [1] Devlog on Mastodon: https://hostux.social/@lfa/115085453159175571 [2] gopher://spike.nagatha.fr:70/