82

Do we know when and where the idea of adding a suffix to filenames was conceived? I have found a lot of information about the history of specific file formats, but I am curious about when the need for separating files by type arose and who got the idea to put that information in the names of the files.

These might be separate questions, but I would also want to know when the convention to add the file extension as a dot followed by a suffix was created, and, if that is possible to know, what the first file extensions were.

9
  • Note the "convention" to add the file extension as a dot - is just one of many (albeit the prevailing today). There are lots of other ways to do that.
    – tofro
    Commented Nov 1, 2023 at 11:07
  • 1
    Yes, that's why I put that as a separate question
    – viggo
    Commented Nov 1, 2023 at 11:09
  • 12
    A close precursor to filename extensions is the "second file name" in MIT's CTSS, demonstrated in 1961. This tells CTSS how to process a file, but it was not written with a dot separator. Commented Nov 1, 2023 at 11:18
  • 2
    Closely related to the CTSS second filename is the file naming convention in "the monitor" for the PDP-6 computer in 1964. If I recall correctly, the monitor used dot as a separator between the two parts of the filename. The PDP-6 is completely unrelated to the 7094 processor used to build CTSS, but the MIT community and the DEC community shared a lot of ideas. Commented Nov 1, 2023 at 12:15
  • 3
    @another-dave Being 'in' the name vs. delimiter is not really a workable distinction, as storing that dot is usually only common in systems that do not use a file extension on FS level, like Unix, which are also in general of later origin. Systems based on file extensions tend to store file name and file extension in dedicated fields, using the dot as delimiter when parsing.
    – Raffzahn
    Commented Nov 1, 2023 at 13:48

8 Answers 8

68

The MIT Compatible Time-Sharing System (CTSS), demonstrated in 1961, had two "names" for each file, with the second telling CTSS how to process the file. This had the function of a filename extension, but was apparently not written with a dot separator.

Examples included "MAD" for source code for the Michigan Algorithm Decoder programming language, "FAP" for the FORTRAN assembly program, "SYMTB" for symbol tables and, apparently, "BSS" for the .bss segment.

It appears that CTSS was able to run programs for the IBM FORTRAN Monitor System, which served as a basis for parts of CTSS.

IBM's CMS (originally Cambridge Monitor System, now Conversational Monitor System, part of z/VM), was influenced by CTSS and still uses two-part filenames, called "filename" and "filetype". The MVS and z/OS line of IBM mainframe operating systems uses a dot as a directory separator, and doesn't use filetypes. The DOS/VSE line doesn't use filetypes either.

The MS-DOS style of filename and extension descends (via CP/M) from DEC operating systems, which took inspiration from CTSS, as Walter's answer explains.

Some systems allowed filenames on tapes, but filenames became much more important once disk drives were in general use. CTSS was first demonstrated in November 1961, plausibly with the IBM 1301 disk drive which had been announced in June and held 28 million (6-bit) characters. That was the first disk with a head per surface, which reduced maximum access time to 180 milliseconds, making a dir command actually useful.

10
  • IBM's Cambridge Monitor System (CMS) was directly influenced by CTSS - some of the initial developers worked in Corbató's lab at MIT. CMS still uses 2-word filenames (called the "filename" and "filetype"), and is still sold by IBM as part of its z/VM product, 56 years later. Commented Nov 3, 2023 at 19:50
  • @RossPatterson: Thanks: what do you think of this this revision? Commented Nov 3, 2023 at 21:12
  • By "main line", I assume you mean z/OS (aka MVS), which indeed doesn't have filetypes. Commented Nov 4, 2023 at 22:49
  • @RossPatterson: Thanks, added. Do you know if the DOS/VSE lineage uses filetypes? Commented Nov 4, 2023 at 23:10
  • As far as I know, it does not. They were purely a CMS thing. Commented Nov 6, 2023 at 1:09
59

The PDP-6 multiprogramming monitor, an early operating system first delivered in 1964, used the term "filename extension" for the second name attached to a file, usually indicating the type. It also used the dot character as preceding the extension.

The linked document explains the monitor, although not in detail.
Multiprogrammed monitor

In that document, under FILE DELIMITERS, you'll see that dot precedes a filename extension.

The people who built the monitor were undoubtedly influenced by the CTSS system at MIT. Some of the early PDP-6 team were veterans of the Tech Model Railroad Club, and had persuaded the designers to add four stack oriented instructions to the repertoire.

Edit: The PDP-10 was a follow-on processor to the PDP-6, and the monitor added support for it. Eventually, the monitor was renamed to TOPS-10. The dot convention spread to the other operating systems within DEC. CP/M and MS-DOS also used the dot to separate the two parts of a filename.

Bill Gates may have first been exposed to the filename.ext convention when he worked on a PDP-8 in prep school.

8
  • 2
    sounds quite right. It might be a good idea to add a paragraph drawing the lineage up to MS-DOS, making it visible to younger folks.
    – Raffzahn
    Commented Nov 1, 2023 at 13:49
  • 6
    wouldn't Microsoft have "bought" the filename.ext convention when they acquired the CP/M codebase via 86-DOS in 1980?
    – dlatikay
    Commented Nov 2, 2023 at 16:56
  • 1
    Does "prep school" mean something different in the USA, or did fee-paying elementary schools in the late '50s really have pdp-8?
    – James K
    Commented Nov 2, 2023 at 19:46
  • 2
    @JamesK: It's short for college-preparatory school. See Wikipedia.
    – Kevin
    Commented Nov 2, 2023 at 20:13
  • 4
    @dlatikay: Microsoft didn't acquire the CP/M codebase - they acquired QDOS, which implemented (most of) the CP/M API but didn't share any of the code.
    – john_e
    Commented Nov 2, 2023 at 22:09
44

In addition to Walter's spot on answer about the combined use of extensions and delimiting them by a dot and John's about the CTSS (*1) as origin for user defined types, it might be worth to note that the concept grew out of more humble beginnings. It also was (and in some cases still is) different from what the question assumes.

[Who invented] file extensions in file names?

Historical file name extensions are not in a file name - considering 'in' as part of the file name - but a separate attribute to a file - much like date created or owner.

Do we know when and where the idea of adding a suffix to filenames was conceived?

Please see Walter's answer for the direct ancestor of the modern file type and handling.

I am curious about when the need for separating files by type arose

The beginning may even predate nearly all of what we would nowadays call OSes, and originates with the first usable machine-controlled (*2) mass storage, aka Tape Drives. Here headers helped to describe the way records are accessed within a file, most notably fixed length vs. variable length vs block access.

That way, a user program could read records from tape the same way independent of format (*3). With disks more complex types were introduced, like QSAM, ISAM, VSAM, etc., those types were coded in dedicated fields and accessed by commands or command parameters separate from the file name.

Most notable here is that this type scheme grew bottom up, out of necessity to support certain FS services - like the mentioned record access - and strictly limited to what the OS/FS could understand.

In contrast, the second file name of the CTSS was developed in a top down fashion to provide a general purpose field, not intended for (primary) OS interpretation for structure but marking purpose for applications to handle them.

Follow-up systems to that went two ways, either going

  • the DEC way (*4) of using two dedicated fields of Name and Type with the latter being handled as part of the file name delimited by a dot. Or they followed

  • the UNIX way (*4) of dropping that extension field, handling only a single name field with no further structure.

The DEC way led to CP/M and in turn MS-DOS. Here all user interaction was shaped to make the dedicated field look as if it was part of the name field, thus the general impression of an extension being part of the name. While those later extending the Name part to 8 chars (DEC was originally 6), the extension was kept as 3 characters, creating the well known 8+3 structure excluding the dot.

The dot was never stored on media or in (FS) data structures. It's only a delimiter for input parsing and added on output for symmetry/convenience. Likewise the name part is always 8 characters and filled up with spaces.

An interesting variant of the DEC way is the Macintosh MFS and follow up HFS as it manages not one but two file 'types', four bytes each. One noting the creator and one for the type, but none of them directly visible to the user.

who got the idea to put that information in the names of the files.

Strictly that only happened with systems based on a flat file concept - most notable the UNIX-FS - that is, systems that do not support different file types as part of the file system. In those systems a File is just a blob of data. Giving it any descriptive meaning is up to applications (*5). Any file extension used is not a dedicated file type in its own right, but a naming convention to structure a single file name including the dot.


Bottom line, even a simple looking question like this can have a very complex background :))


*1 - Both are worth an upvote.

*2 - "Machine-controlled" meaning read and/or written with full positioning control (rewind/reposition) on the same media.

*3 - Much as were stacks of punched cards. In fact, exactly the same way as device assignment to program input has always been an operator/OS task. Most (not too complex) mainframe programs do not handle filenames at all but read from and write to standard handles. A bit like with Unix, except that there is more than one standard handle available for each.

*4 - Names used as generic indicators of heritage, not necessary inventor.

*5 - Or other dedicated fields, like the executable flag in unixoid FSes.

18
  • 7
    It might also be worth noting that the 6+3 format comes from those DEC systems using 6-bit characters that are packed 3 per 18 bit word.
    – Chris Dodd
    Commented Nov 1, 2023 at 20:53
  • 1
    @ChrisDodd True. Left it out, despite being the technical reason, as it's more of a curiosity, not really adding much. Important point it's being two fields vs. one in other systems.
    – Raffzahn
    Commented Nov 1, 2023 at 20:56
  • Unix inherited its approach from Multics.
    – John Doty
    Commented Nov 1, 2023 at 23:08
  • 3
    It's worth noting that the filename.ext convention differs from treating the file type as an attribute. A direcory can have two files: myprog.for and myprol.rel (where rel means relocatble binary). It this case, the extension serves to identify the file as well as to establish the type. The filename alone is not sufficient to uniquely specify a file. Commented Nov 2, 2023 at 13:32
  • 1
    @RussellStuart Well, yes, that's the natural consequence of a need to identify files with arbitrary names. If the FS doesn't help, user side solutions will arise. Magic numbers being one of them, bringing its own (dis-)advantages. Not easy visible, but safe against meta data loss, like due file transfer between different FS.
    – Raffzahn
    Commented Nov 2, 2023 at 21:27
15

The PROMPT (disc)/POST (magtape) file maintenance systems, on English Electric KDF9 in the mid-1960s, used a 12-character alphanumeric file identifier. Not up to 12 chars, but 12 chars whether you wanted them or not. The same file system layout was adopted for Leeds University's Eldon2 multiaccess system.

Of the 12 characters, the last 3 conventionally encoded the 'type' of a file.

1-char language identifier: A for Algol, U for Usercode (assembler), and that's all the choices you needed

1-char type of code: P for Program, S for Segment

1 char for number of store modules (i.e., size), U for Universal (i.e., not applicable)

So Algol program names typically ended with APU.

No dot involved though.

5
  • 2
    Lovely convention. Reminds me of ways user redefined text fields for their own purpose on systems where they had no chance to have fields added/restructured. Like in one case where they used the last 7 characters of the street of an employee record to write in his har licence plate if he was allowed to use that car for company trips. It was a hell of a job to find all those quirky 'improvements' when we redid that application. Not alone because of data conversion, but already before to even find all those additional information. Some even encoded different by different departments.
    – Raffzahn
    Commented Nov 1, 2023 at 18:42
  • 1
    Characters 8 and 9 were a revision number, which the amender (editor to modern users) incremented regardless of whether they were numeric :-)
    – dave
    Commented Nov 2, 2023 at 1:27
  • Oh yes, the real stuff :)) Hearing this should not only give everyone an extra wide grin, but also remind us that the problems back then were exactly the same as they are today. We're still working to solve the same issues with the same tools, except they are now of megalomanic size, offering ever more ways to fail terribly.
    – Raffzahn
    Commented Nov 2, 2023 at 1:36
  • 4
    Hey, if you don't read the documentation when naming your file, you deserve what you get.
    – dave
    Commented Nov 2, 2023 at 1:40
  • 3
    And the documents were in the bottom of a locked filing cabinet stuck in a disused lavatory with a sign on the door saying 'Beware of the Leopard'... (apologies to Douglas Adams).
    – Jon Custer
    Commented Nov 2, 2023 at 13:08
11

The filestore of GEORGE 3 (ICL 1900 systems) had a four-character language code for each file.

This was not considered to be part of the file name, but was part of an 'entrant description' (file specification in other systems) when a file must be identified to the system.

For example, a Fortran prog might be :DAVE.MYPROG(/FORT), where :DAVE is the user identifier, MYPROG is the file name, and FORT says it's Fortran source.

As far as I recall, GEORGE didn't care whether you used language types or not, but there were assumptions built into some programs, much like a typical compiler front-end today assumes that .c means C source.

Note that there's a dot in the entrant description, but it's not before the file 'extension'.

While this is deviating from being a strict answer to what I think was the actual question asked, it demonstrates that the problem solved by "dot extension" was one that every file system tended to recognize as important.

GEORGE 3 was implemented from about 1965 onwards; the tree-structured file system was inspired by the well-known 1965 paper by Daley and Neumann.

3
  • Another interesting tidbit in that area showing that today's simplified 'dot-extension' scheme is only one of many possible ones. And not just possible, but as well existing :))
    – Raffzahn
    Commented Nov 2, 2023 at 4:06
  • Do you have a rough date for this? That would help put it in context with the other answers. Commented Nov 3, 2023 at 8:27
  • Mid-sixties; answer updated to add that.
    – dave
    Commented Nov 3, 2023 at 12:51
6

The IBM 1130 had five character file names (this is how FORTH got its name). Although the official character encoding was 8 bit EBCDIC, names were encoded as pairs of 16 bit words using 6 bit characters. This left two extra bits, used in file names to encode the type of the file. There were three types: object files, executable files, and data files. Source was stored as decks of cards, not files.

3

A supplement for answers of Walter Mitty and Raffzahn. Multics filenames also use suffixes (or called 'last component') started with a dot, such as .fortran, .pl1 and .runoff.

I don't know whether these suffixes are same to the concept of CMS filetype or DEC/MS-DOS file extensions. If these suffixes are also file extensions, I don't know which of DEC way and Multics influenced another, or which exists earlier, or they have separated or same sources, because the beginning time of the development of Multics is close to the year PDP-6 Monitor is released.

Multics Commands, Page 3-688, the 'suffix' command.

1
  • Of course it does, after all, MULTICS is based on CTSS continuing its development.
    – Raffzahn
    Commented Sep 19 at 22:56
-3

The first known use of filename extensions was in the PDP-6 multiprocessing monitor, an early operating system first delivered in 1964. The PDP-6 monitor used the dot character as preceding the extension, and the convention later spread to other operating systems, such as CP/M and MS-DOS.

Bill Gates, the co-founder of Microsoft, has said that he was first exposed to the filename extension convention while using the PDP-10 operating system at Harvard University in the early 1970s.

2
  • 3
    I'm struggling to see what value this answer adds over what Walter Mitty wrote. If an existing answer includes all you have to say, you'll get the "cast up-vote" privilege at just 15 points reputation, and that's the right way to confirm other people's answers. Commented Nov 3, 2023 at 8:20
  • All of the following points are in the answer of Walter Mitty: PDP-6; Monitor; 1964; dot preceding the extension; spread to CP/M &MS_DOS. Even the mention of Bill Gates is there, except that answer states that it was at prep school rather than Harvard. Commented Nov 21, 2023 at 22:29

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .