5

The Wikipedia article on “An Open Letter to Hobbysts” says that Bill Gates complained about hobbyists pirating his software, and due to piracy he refused to publish the machine code of his Altair BASIC.

The Wikipedia article states:

He cited the unfairness of gaining the benefits of software authors' time, effort, and capital without paying them as a rationale for refusing to publish the machine code for his company's flagship product, thereby making it available to lower-income hobbyists who could have borrowed such program listings from their local library and entered the program into their hobby computer by data entry.

  1. What does it mean to publish the machine code?
  2. Why programmers used to publish machine code?
9
  • 19
    The phrase "machine code" doesn't appear in the actual letter. In fact I don't see anything about refusing to publish code of any kind. It seems to me that this insertion by an anonymous Wikipedia user at 70.171.155.43 is inaccurate as well as poorly worded. Oct 3 at 3:03
  • 11
    I have reverted that edit and deleted the passage in question. Oct 3 at 5:26
  • 3
    Other than that it happened a while back, how is this about Retrocomputing at all, let alone compared to copyright, intellectual property or publishing in general? My suggestion is that except historically, this Question has nothing to do with retrocomputing. Either way, are you suggesting there's something special about publishing machine code, as compared to publishing anything else? Oct 3 at 21:44
  • 3
    I remember typing in pages of hex into a Commodore-64 from the back of magazines with a friend. One of us would read, the other would type, and at the end, we had a new game saved on tape.
    – Steve
    Oct 3 at 21:57
  • 2
    @NateEldredge I suggest converting that into an answer, since "the passage didn't appear in the cited text" is clearly the correct one. Oct 4 at 7:11

2 Answers 2

12

What does it mean to publish the machine code?

Machine Code in the sense used is what otherwise would be called a HEX-Listing or HEX-Dump. The most compact form a program could be published and distributed - it was the time before one could just download a file or walk to your local computer store (or Walmart) to buy some media with that file. Not to mention that a good number of users did not have any peripherals.

Machine code listings are the earliest form of 'binary' software distribution, no matter if printed in a magazine or as punch tape (*1).

Why programmers used to publish machine code?

It's less about programmers as magazines managing their pages. While it's no issue to have a page or two of assembly source (or BASIC or PASCAL), anything past the most simple application would take a whole book.

Just take the BASIC in question. Micro Soft's 1978 6502 version consisted of 6,955 lines (*4) of source code. Printed in a magazine this will fill a good 100 pages (*5).

In contrast Intel-Hex printed as two columns at 70 lines will 'store' 2.2 KiB per page, so an 8 KiB Basic can fit on 4 pages including some headers and explanation.


So, why does Mr. Gates refer to this at all?

At the time it was common to circulate software as Hex-Listing either in paper tape form, or as print out. Hobbyists shared their programs that way on their meetings. Mr. Gates is directly referring to this practice which of course would undermine his sales.


*1 - Punch tape based software distribution was usually not made using binary encoding but as loadable tape according to a CPU manufacturer format like Intel-Hex (*2,*3), Motorola S-Records or MOS' format, or computer manufacturer format like Extended Tektronix Hex.

*2 - Like Tiny-BASIC was distributed

*3 - Extended by several companies, like Zilog, and used until today - even for brand new systems like the BBC MicroBit with its 'Universal Hex Format'

*4 - Byte used for Assembly listings an extended satzspiegel of ~70 lines per page - almost too small to read.

*5 - An impractical amount, even for a magazine like Byte. Its 1/1978 issue had less than 200 pages with a good 50+% being advertisement.

12
  • 2
    So programmers would actually go through the trouble of typing pages and pages of machine code into their machine? Amazing how much time people had before the internet stole it away... Oct 3 at 6:31
  • 2
    @leftaroundabout No they didn't. Typing in a page or two of machine code was possible - I did it once or twice - but typing in a whole BASIC interpreter would have been extremely time consuming. Serious software for the computer we had (a Commodore PET) was distributed on cassette tape or floppy disk.
    – JeremyP
    Oct 3 at 8:12
  • 6
    @leftaroundabout yes, they did - of course in varying degree. Keep in mind, these were the very early times with only a few people involved,usually very dedicated ones.
    – Raffzahn
    Oct 3 at 9:30
  • 1
    @Raffzahn It's all "way back then" to me :). Now this has reminded me of the RSA T-shirt, which has since been remade using QR-code.
    – Barmar
    Oct 3 at 16:07
  • 7
    "We" (well, certainly I) typed is legion amounts of code. TIme and labor I had, money for tapes and such, not so much. Assembly was difficult simply because if it went wrong, you were kind of dead in the water. It was difficult for novices to debug compared to BASIC. My friend and I took turns typing in the FigForth PDP source on the schools PDP-11/70. There's a reason why many of the magazines offered utilities to help you ensure that you were typing in code correctly (typically checksums for each line). In consumer magazines, assembly was rare, but not in magazines like Dr. Dobbs. Oct 3 at 16:10
4

In 1976, there was a lot more software, especially for microcomputers, written directly in assembly language. The BASIC interpreter certainly was written in assembly language. At the time, the term "machine code" referred to the textual representation of the program that would be assembled into the final product.

Today the name we use for this "machine code" is "source code". So, Gates is referring to his reluctance to publish the source code for his BASIC interpreter.

11
  • 2
    Microcomputer users might have called their assembly-language programs "machine code", but none of the minicomputer people I associated with did that. Mostly machine code lived on machine-readable storage, but if it was on paper, it'd be a string of octal. Oct 2 at 21:55
  • 4
    I still like to distinguish assembler from machine code. Back in the days gone by when I first got involved and had no assembler it was raw machine code, although I would write instructions e.g. jmp but to actually code then it was the hex of the opcode and then where to jump as the hex code. Pretty slow work. Got an assembler much faster coding and letting the assembler produce the machine code.
    – MikeT
    Oct 3 at 7:25
  • 3
    I PEEKed out the whole of the ZX80 ROM as decimal, writing it all out manually as hex, then converted to Z80 assembler by looking up every instruction in a book. Not made easier by not knowing which bytes were code, data, or memory-mapped devices. I made reasonable sense out of some parts of it. Never again! Oct 3 at 8:04
  • 3
    Is there a citation for "machine code" being conventionally used to refer to assembler source code? Oct 3 at 14:23
  • 1
    @another-dave there are definitely endless examples of that conflation e.g. here or here — though many other contemporaneous sources (such as this) are more careful.
    – Tommy
    Oct 3 at 15:06

You must log in to answer this question.

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