💾 Archived View for sprock.dev › posts › the-unix-philosophy.gmi captured on 2024-05-10 at 10:41:28. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2022-06-03)

-=-=-=-=-=-=-

The Unix Philosophy and Lagrange

RE: A Critique of Lagrange

I wasn't initially going to wade into this discussion (since it's not really what I want this gemlog to be), but something is bugging me. Maybe I'm misreading Ainent's initial post but they seem to be arguing that Lagrange violates the Unix philosophy *because* it supports 6 different protocols (including file://). I think this assumes a stronger interpretation of "one thing" than is desirable.

Do One Thing

It is certainly true that "do one thing" could mean "handle a single protocol" and this could be desirable with small, composable command-line programs – especially if the program needs to take protocol-specific options – but this is not the only way of conceptualizing it. It's also possible for dealing with gopher:// and gemini:// to be "doing one thing", if that one thing is browsing the small net. While the protocols (and their associated data formats) do have differences, these are relatively small enough and easy enough to handle that I think it makes sense to treat them as a single thing, especially given the fact that browsers have to parse the received data anyways.

To me, a more accurate way to think about this is to say that Lagrange does two closely related things: it provides a way to browse the small net (via finger://, gemini://, gopher:// and spartan://), and it allows for uploading files to the small net (via spartan:// and titan://). The latter could probably be easily handled as a separate application (that just pops up a file upload dialog when run with an appropriate URL) and I could see its inclusion as a violation of the Unix philosophy, but I don't think it is notable violation. Even classic Unix tools take on a few closely-related functions sometimes.

Closing Remarks

Finally, I don't think lines of code is a useful measure for this sort of thing, especially when Lagrange includes both a complete GUI library and many usability features that can't easily be handled by a separate program given its status as a GUI application.