• alectronic@piefed.zipOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      3 hours ago

      I suspect sarcasm but in case it is not, photos are just binary files, just like videos and many other file formats.

  • JackbyDev@programming.dev
    link
    fedilink
    English
    arrow-up
    33
    ·
    10 hours ago

    It makes more sense when you realize that it’s not that everything is files it’s that everything can be treated as a file. There are other APIs to interact with things, but everything can be interacted with as if it was a file. It doesn’t seem as bonkers like this.

      • JackbyDev@programming.dev
        link
        fedilink
        English
        arrow-up
        1
        ·
        40 minutes ago

        Yeah, it sort of depends on the definition of the word file. “File” in the sense that it can be interacted with like a file versus “file” in the sense that it’s data on a disk. But then, if you’re really thinking about it, data on a disk isn’t a file, it’s data, and we can just interact with it like a file.

    • absentbird@lemmy.world
      link
      fedilink
      arrow-up
      9
      ·
      6 hours ago

      Exactly. A file is really just a way to understand a collection of bits. So saying everything is files is like saying everything in computers can be described as sets of bits, which is not a terrible heuristic.

  • BartyDeCanter@piefed.social
    link
    fedilink
    English
    arrow-up
    96
    ·
    edit-2
    15 hours ago

    Stages of POSIX enlightenment:

    1. It couldn’t possibly all be files
    2. It’s all files
    3. What is a file, anyway?
    4. There’s no such thing as a file
    5. It couldn’t possibly all be files
    6. Everything is a file

    Most people stop at stage 2, stage 3 hits when you decide to write a filesystem, stage 4 when you’ve finished your first filesystem. Stage 5 is when you start working on kernel internals. No one can tell you how to reach stage 6, you must discover it for yourself.

    • Bo7a@piefed.ca
      link
      fedilink
      English
      arrow-up
      3
      ·
      7 hours ago

      And the hidden 0th level that you only get after being nearly killed by a falling server rack:

      “Files Aren’t Things”

      Which looks great on a tshirt, btw :p

    • jj4211@lemmy.world
      link
      fedilink
      arrow-up
      1
      ·
      6 hours ago

      Missing stage 7: Not everything is a file.

      Linux is closer than other *nixes (sysctl equivalents in some platforms are not files, but they are files in Linux).

      However get very far into network and the file-like behaviors become more limited. From an application, at least you have a decent chance of having unseekable, but otherwise ‘file-like’ interaction with stream protocols. Then you need recvmsg/sendmsg. Then you want to deal with low level interaction with the network stack and dealing with NETLINK and such…

      • Bluewing@lemmy.world
        link
        fedilink
        arrow-up
        5
        ·
        7 hours ago

        Asking for a friend.

        If you can recognize “nothing” then “nothing” must be something right? So if nothing is a file, because /dev/null says so, then nothing MUST be something to be a file. And therefore /dev/null can’t be nothing.

        Or do I just need more tea? Or maybe whisk(e)y?

        • HeHoXa@lemmy.zip
          link
          fedilink
          arrow-up
          6
          ·
          6 hours ago

          The word “nothing” isn’t itself nothing. It is something used to describe nothing.

          • Bluewing@lemmy.world
            link
            fedilink
            arrow-up
            6
            ·
            5 hours ago

            The word “nothing” is the English word describing the concept of nothing. And I have to use the word to describe the concept. So yes, you are correct the word is itself “something”. So that is probably one point for “nothing” to not exist.

            I have now consumed 3 cups of tea. And my head now hurts from thinking about nothing. I should never have stepped into this post.

          • gandalf_der_13te@feddit.org
            link
            fedilink
            arrow-up
            1
            ·
            4 hours ago

            in fact that gets used in abstract mathematics to first introduce the natural numbers. the empty set (nothing) (which you define as 0) is not itself nothing, so you can define the set that contains just the empty set, which now is not empty itself, but contains one element, so you define that as 1 …

    • SpaceCowboy@lemmy.ca
      link
      fedilink
      arrow-up
      23
      ·
      15 hours ago

      Unfortunately, no one can be told what a file is. You have to see it for yourself.

      This is your last chance. After this, there is no turning back. You take the blue pill - the story ends, you wake up in your bed and believe whatever you want to believe. You take the red pill - you stay in Wonderland and I show you how deep the file system goes.

    • swab148@lemmy.dbzer0.com
      link
      fedilink
      arrow-up
      9
      ·
      14 hours ago

      You’ll know you’ve reached stage 6 when you seriously start considering running Plan 9 as a daily driver

    • redjard@reddthat.com
      link
      fedilink
      arrow-up
      0
      ·
      7 hours ago

      The troubles between stage 2 and 6 are probably realizing dirs are not files, and seeing that device and driver files are different things from data files. Then stage 6 would be realizing that filesystems themselves just sit on device files. The directories and data files are in the device files. In truth, everything is a device file.

      But then, I propose a stage 7. Because when you trace it all back, with mounts pointing to device files sitting in mounted file systems, you see that /dev is a tempfs, mounted in a tempfs, in which device files are “mounted”. The fondamental root, /, is underneath the root filesystem a tempfs too. At boot, the kernel makes a tempfs, and later overlays the rootfs mounted from the /dev mounted in the root tempfs.
      Everything is a filesystem, ever,thing is mounted. The true files, device files, are mounted too. They are the mounting of a kernel module in the same way a directory - a filesystem - is a mounted kernel module.
      The Linux world is a ying and yang between dir structures and mounted kernel modules. In all of this, data files, the “true files”, don’t even show up. At the end, it’s just the kernel talking to itself.

      • BartyDeCanter@piefed.social
        link
        fedilink
        English
        arrow-up
        1
        ·
        1 hour ago

        Don’t leap ahead, or you will come to a false conclusion. Write a filesystem, then write another using a completely different approach for a system without a kernel. Then run them on each others targets. Only then will your mind be clear enough to see.

        • redjard@reddthat.com
          link
          fedilink
          arrow-up
          1
          ·
          53 minutes ago

          Hm, I wrote a btrfs tool once that operates on an unmounted btrfs partition (so I can introduce forbidden states).
          And I wrote a normal fuse-based emulated fs to fool a game into loading my custom infinite world as a save.

          What more do I need to reach dao?

    • Equinox1289@sh.itjust.works
      link
      fedilink
      arrow-up
      5
      ·
      14 hours ago

      Okay, but what are blocks then? A file is really just a bunch of blocked stacked together with the inode metadata also sitting on another block, so is everything just blocks or because you can emulate a block device on a filesystem, are blocks themselves files? If that last part is true then files are infinitely recursive and my head is starting to spin.

      • jj4211@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        6 hours ago

        The devnode that is used to reference the block is a file, so you come back to blocks just ‘being offsets into some file’.

        Though system calls, ioctls and networking credibly get away from file semantics

      • BartyDeCanter@piefed.social
        link
        fedilink
        English
        arrow-up
        4
        ·
        11 hours ago

        You are almost ready to take the next step. But to do so, you must unlearn what you think you know. Write a filesystem that does not have blocks for a media without pages, and you will find the footprints of your next teacher.

  • Truscape@lemmy.blahaj.zone
    link
    fedilink
    arrow-up
    41
    ·
    17 hours ago

    Yep, takes a moment to wrap your head around but the longer you read linux/unix documentation, the more it makes sense why it is the case.

    • gandalf_der_13te@feddit.org
      link
      fedilink
      arrow-up
      2
      ·
      4 hours ago

      tldr: it’s to have nicer, less complicated I/O operations

      it enables just having two API calls: read() and write() to do everything

  • BlueKey@fedia.io
    link
    fedilink
    arrow-up
    5
    ·
    14 hours ago

    But some things are directories (like cgroups). And Networknamespaces were also controled in a weird way.
    And then there are kernel features which are not exposed through a file or syscall but through a special type of socket.

    • Axolotl@feddit.it
      link
      fedilink
      arrow-up
      6
      ·
      9 hours ago

      Aren’t directories just files that say “hey i am directory ABCD and file X, Y and Z are my childs”?

      • notabot@piefed.social
        link
        fedilink
        English
        arrow-up
        4
        ·
        8 hours ago

        Directories are just files if you squint at then right, and sockets are basically files too. As another commenter said, it’s not that everything is literally a file, but that it presents as a file, and can be interacted with as one.