<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Comments on: A list of scattered definitions</title>
	<atom:link href="http://thetarpit.org/2023/a-list-of-scattered-definitions/feed" rel="self" type="application/rss+xml" />
	<link>http://thetarpit.org/2023/a-list-of-scattered-definitions</link>
	<description>"Now I feel like I know less about what that blog is about than I did before."</description>
	<pubDate>Sat, 11 Apr 2026 00:20:30 +0000</pubDate>
	<generator>http://thetarpit.org</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Cel Mihanie</title>
		<link>http://thetarpit.org/2023/a-list-of-scattered-definitions#comment-4312</link>
		<dc:creator>Cel Mihanie</dc:creator>
		<pubDate>Fri, 23 Jun 2023 22:39:03 +0000</pubDate>
		<guid isPermaLink="false">http://thetarpit.org/?p=499#comment-4312</guid>
		<description>I think it all makes a lot more sense if you just mentally substitute their unfortunately named "file" for your/our "resource". So in POSIX, you're actually opening "resources", having different "resource types", from the "resource system".

Amusingly, even my beloved ZX Spectrum, a machine very far removed from any POSIX standard (or any standard at all), also features an I/O abstraction interface as one of the many overengineered things in its ROM. The PRINT and LIST commands seem like they are meant for the screen, but in fact they can be told to send data over any "channel" (think 'character device'). By default you have a tty-like "channel" for the main screen, one for the input area, one for the printer and one for the network, and I think you can also open channels for files on a floppy (but not tape). On the other hand, LOAD/SAVE commands have an entirely different I/O abstraction for tapes, disks, ramdisks, etc. At least they use "files" in the traditional sense.

I/O abstraction is one HELLUVA drug.</description>
		<content:encoded><![CDATA[<p>I think it all makes a lot more sense if you just mentally substitute their unfortunately named "file" for your/our "resource". So in POSIX, you're actually opening "resources", having different "resource types", from the "resource system".</p>
<p>Amusingly, even my beloved ZX Spectrum, a machine very far removed from any POSIX standard (or any standard at all), also features an I/O abstraction interface as one of the many overengineered things in its ROM. The PRINT and LIST commands seem like they are meant for the screen, but in fact they can be told to send data over any "channel" (think 'character device'). By default you have a tty-like "channel" for the main screen, one for the input area, one for the printer and one for the network, and I think you can also open channels for files on a floppy (but not tape). On the other hand, LOAD/SAVE commands have an entirely different I/O abstraction for tapes, disks, ramdisks, etc. At least they use "files" in the traditional sense.</p>
<p>I/O abstraction is one HELLUVA drug.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: spyked</title>
		<link>http://thetarpit.org/2023/a-list-of-scattered-definitions#comment-4309</link>
		<dc:creator>spyked</dc:creator>
		<pubDate>Fri, 23 Jun 2023 06:54:28 +0000</pubDate>
		<guid isPermaLink="false">http://thetarpit.org/?p=499#comment-4309</guid>
		<description>While I agree that a uniform interface for manipulating I/O resources is useful, I didn't go the orthodox way because the standard definition performs a series of semantic abuses, beginning with the sheer fact that the interface defined by the POSIX folks is &lt;em&gt;barely&lt;/em&gt; uniform. For example you can't lseek a pipe or a socket as well as you can't recvmsg a regular file.

It really escapes me why they tried to fit all I/O within the single umbrella of "file", only then to provide ad-hoc implementations of each "file type", when they could have just called the "file descriptor" a "resource descriptor" (or whatever) and let a file be a file, a socket be a socket and so on and so forth. Anyway, no one using Linux calls a socket a "type of file", do they? Because each of these abstracts different resources: the socket a network connection, the file some disk space, the pipe a virtual support for consumer-producer design patterns; and so they're different things, no matter how elaborately the authors of the standard(s) try to lie to us.

procfs and sysfs are indeed another type of perversion, in that they provide the illusion of persistent storage -- as opposed to device files and named pipes, which are indeed denoted as special types in the file system.

I can only feel sorry for the POSIX folks: it's so fucking hard to design an interface that on one hand supports the complexity they required, while on the other maintains consistency -- this also a propos our discussion regarding &lt;a href="http://thetarpit.org/2022/notes-on-openbsd-device-drivers#comment-3460" rel="nofollow"&gt;various types of disks&lt;/a&gt;. So I understand, they gave up consistency in favour of practicality, the end result being that the systems programmer will now also be doomed to suffering along with them.</description>
		<content:encoded><![CDATA[<p>While I agree that a uniform interface for manipulating I/O resources is useful, I didn't go the orthodox way because the standard definition performs a series of semantic abuses, beginning with the sheer fact that the interface defined by the POSIX folks is <em>barely</em> uniform. For example you can't lseek a pipe or a socket as well as you can't recvmsg a regular file.</p>
<p>It really escapes me why they tried to fit all I/O within the single umbrella of "file", only then to provide ad-hoc implementations of each "file type", when they could have just called the "file descriptor" a "resource descriptor" (or whatever) and let a file be a file, a socket be a socket and so on and so forth. Anyway, no one using Linux calls a socket a "type of file", do they? Because each of these abstracts different resources: the socket a network connection, the file some disk space, the pipe a virtual support for consumer-producer design patterns; and so they're different things, no matter how elaborately the authors of the standard(s) try to lie to us.</p>
<p>procfs and sysfs are indeed another type of perversion, in that they provide the illusion of persistent storage -- as opposed to device files and named pipes, which are indeed denoted as special types in the file system.</p>
<p>I can only feel sorry for the POSIX folks: it's so fucking hard to design an interface that on one hand supports the complexity they required, while on the other maintains consistency -- this also a propos our discussion regarding <a href="http://thetarpit.org/2022/notes-on-openbsd-device-drivers#comment-3460" rel="nofollow">various types of disks</a>. So I understand, they gave up consistency in favour of practicality, the end result being that the systems programmer will now also be doomed to suffering along with them.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Cel Mihanie</title>
		<link>http://thetarpit.org/2023/a-list-of-scattered-definitions#comment-4308</link>
		<dc:creator>Cel Mihanie</dc:creator>
		<pubDate>Fri, 23 Jun 2023 04:20:49 +0000</pubDate>
		<guid isPermaLink="false">http://thetarpit.org/?p=499#comment-4308</guid>
		<description>"A file is an abstraction of persistent data storage"

I dunno about that, the Unix/POSIX conception of a "file" seems to be more like "an abstraction for accessing data external to the process", i.e. anything that's not a variable. You have sockets, FIFOs, procfs and sysfs entries that are not persistent, not finite, and sometimes they don't even store anything.</description>
		<content:encoded><![CDATA[<p>"A file is an abstraction of persistent data storage"</p>
<p>I dunno about that, the Unix/POSIX conception of a "file" seems to be more like "an abstraction for accessing data external to the process", i.e. anything that's not a variable. You have sockets, FIFOs, procfs and sysfs entries that are not persistent, not finite, and sometimes they don't even store anything.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
