Io is interesting to me as a sort of alternative universe version of NewtonScript. In this universe, I’m a little smarter, a little more self-confident, and I have a little more time. :) It has a strong opinion on simplicity, like Self or Smalltalk, whereas I compromised on that a bit to try to make the language seem more familiar to programmers of the Apple languages at the time, notably Pascal. It also has 100% more thought given to concurrency!
Apple was one of the originators of Unicode, so it was pretty obvious we would use it. However, we made the same mistake as Windows NT, Java, and JavaScript (and, to be fair, Unicode itself!) in thinking 16 bits would be enough and using UTF-16 to simplify the string API. Unlike the others, Newton OS didn’t survive long enough to hit that problem, though.
Well, although I worked on both of them, they really had nothing to do with each other.
To oversimplify, there was the “Senior” Newton project that was the outgrowth of what was going on when I joined in 1988 and would have been Dylan-based, and the “Junior” Newton project that I switched to in 1992 (?) to make a smaller, less capable, but faster-shipping product. Junior hardware was so much smaller that we had to do essentially a whole new architecture, which ended up having NewtonScript as the app language.
Had Senior shopped there would have been a compatibility later (presumably including a Dylan version of NewtonScript), but we didn’t get that far before Senior was eventually discontinued and everyone focused on Junior.
I always wonder what would have happened if Apple had given away the NTK for free instead of charging a lot of money (I think it was $2000?). I think a lot of hobbyists would have proceed cool stuff but were deterred by the cost. If I remember correctly Palm game their SDK away for free when they released.
The 100 version of the Newton was not very good but the 130 version and then the 2000 were really nice. Also I think Apple should have been more forthcoming with a C++ SDK so people could write own drivers and implement stuff that needed more performance. NewtonScript was just damn slow.
I still like playing with my Newtons from time to time. I also have a 2 MB storage which cost $200.
Yeah, I wonder that too. Apple had always charged for the development system (heck, initially to develop for the Mac you not only had to buy the tools, you had to buy a Lisa!). I don’t remember it being quite that much, though maybe in 2020 dollars it was.
There was a C++ dev kit eventually, but only for drivers (though some people figured out how to use it from NS). I also did a “native NewtonScript” compiler that under the hood compiled NS to C and encapsulated the native code into a NS function.
What really freaked people out was the 1% (?) royalty on apps, which I don’t think lasted long. Now of course Apple gets a 30% royalty and that’s considered normal! (I should mention that we wanted to have a Newton App Store, but you would have accessed it by modem, of course!)
The 2000 had the StrongARM processor that ran about 10x as fast as the earlier models. That was really the first hardware that gave something like the experience we were trying for.
I don't remember the royalty but I remember really well how the NTK killed the finances of a friend and me who wanted to get started with Newton dev right when the MessagePad 100 was released. Plus we had to buy a Mac (Quadra 610?) which also cost a lot. We talked to Apple Germany and the product manager told us if the cost is a problem then they didn't want us. They only wanted "professionals", no amateurs. Big mistake. I guess Apple always had a slightly arrogant touch :-).
I remember there was a C++ dev kit eventually but at that time the momentum for Newton was already gone.
It makes me kind of sad thinking about this. I think with today's connectivity and processing power combined with the ideas of the Newton devs we could have much better devices than what we have today. The iphone feels a little boring. Well made but boring.
Making the NTK so insanely expensive killed my enthusiasm pretty quickly. I was working as a SW engineer in L.A., so even if it would have been only a small game, I would have had the ability to at least add something to the pool.
Even the Palm SDK was commercial in the beginning. But a free toolchain was put together by some hacker after a year or so, which subsequently convinced Palm to lower their price and eventually give it away for free IIRC. Then again, even VisualC 6 cost 400$ or so back then.
The Mac development environment (MPW) wasn't free, either. I was in the MPW group before joining Newton, and made an obnoxious ass of myself saying that MPW should be free. One of the common objections was "how do we support hordes of random developers piling onto the platform?" My response: That's a good problem to have, have you seen the stock recently? Apple was going through some tough times and there was pressure to make money on every front, or at least look like you were going to make money.
We just weren't set up to do a C++ SDK; too much of the system wasn't documented, or designed with third parties in mind, and frankly a bunch of it probably would have had to be cleaned-up in order to be usable by outsiders. Native debugging was done on expensive, hand-built and very specialized hardware ("bunwarmers") which were NuBus-attached boards with a bunch of static RAM and some other things unavailable on the real hardware, and we would have had to do some tools work to make that usable outside as well. There was a serial debugger (substantially ARM's) but it wasn't a great experience.
There never was a coherent installable driver story. That's probably my fault, we were writing code really, really fast without a lot of time for platformy conveniences (that "platformy" stuff was mostly at the NewtonScript level, with Walter, Capps, Martin Gannholm and some many other folks I've unfairly left out). So things like third party PCMCIA support would probably have needed an overhaul.
I did a bit of development for the Newton back when: I wrote Waba for the Newton (a JVM) and Hemlock. But I never could figure out why NewtonScript had two different inheritance paths. It seemed overly and unnecessarily complex. (1) Was this language feature inserted to allow for the parent frame gizmo present in the Newton's GUI toolkit? Or did was the toolkit design constructed after the fact to take advantage of this unusual language feature? (2) Would you have done it differently in hindsight?
The language and toolkit evolved in parallel. Self had unlimited prototype slots and that seemed like too much. The two we ended up with had specific names that reflect their intended purpose, which became clear as we wrote the toolkit and the apps that used it.
The idea was that you inherit from two things: the parent (normally meaning the parent view) so you can have variables scoped to a view hierarchy, and the prototype so you can inherit behavior.
The original Newton hardware had hardly any RAM (I think the NewtonScript heap was about 50k) and the prototype pointer was also essential to allow most of the object to reside in ROM (there was 4MB of ROM).
So bottom line, we had two specific reasons for prototypes and that became two specific slots. Self took a more general approach (it is a research language, after all).
I’d have to think a while about whether to do it differently now. As a comparison, look at the schemes JavaScript frameworks come up with for scoping data to a view hierarchy. In Newton that was just a straightforward variable reference.
Remember that NewtonScript was not intended as a general-purpose language — thus the name!
Howdy Walter! I'm Paul R. Potts. You were very generous with your time answering my endless questions about how NewtonScript worked under the hood back in the day, and I still remember that. It got me into Scheme, Dylan, Common Lisp, and basically widened my world view a lot, and led to me doing several different projects in the nineties with embedded interpreters (Kawa under Java, etc.) These days I am a senior embedded developer. You described Landon Dyer as a "very careful programmer" for the way he wrote the flash card drivers, and I still remember that, and try to apply that to drivers for SPI, EEPROM devices, DACs, and ADCs.
Anyway not really a question... just glad to hear you are still around and kicking and thanks for the inspiration!
Hi Paul! Good to hear you’re doing well and that the inspiration has lasted this long. :)
Yes, Landon was handed the job of implementing transactional storage on NOR Flash memory, which nobody had ever heard of, while bearing in mind that the battery could be taken out at any moment. As I recall, he just sort of went off and quietly did that (aside from the faint sounds of him banging his head on his desk). And I don’t remember ever hearing of lost data on a Newton.
Was there a plan to interoperate between the Newton's object system and the Macintosh's more traditional file-based system? The paper talks about the type system, but beyond that they don't seem compatible.
No, we had a pretty strong opinion on the Newton team that files were not the right thing. Also, we thought of Newton as a stand-alone computer, not a Mac accessory. (Then we learned from the Palm that we kinda missed that one.)
We did a synchronization app for Mac data, but you had to write an adapter to convert your data back and forth to soups. There were never any “files” on the Newton.
Thanks for giving us the opportunity to ask you question. I ported and continued Einstein for a while, trying to make it run well on e-ink displays ATM. I also wrote a little emulator so that MPW tools can run on macOS, Linux, etc. . I bought one of the early MPs, hoping to be able to write apps, but the cost of NTK was just too much, and the resulting lack of software made me abandon the platform quite quickly.
As a novelty, I like to have Einstein running NewtonOS on my Samsung Note 10 which is now really fast and quite impressive for a machine from the 90's.
Apple has refused Einstein for iOS at least once. They don't allow emulators, especially not Apple product emulators, and they don't like the idea of downloading ROMs. Do you have any suggestion on how we could get EInstein into the app store nevertheless? Or how to get around the ROM issue?
Maybe related, I wish we could bring NewtonScript into the 64bit world, surrounded by an updated NewtonOS. There is already half of the ROM rewritten as newton-framework on GitHub. Do you think it is possible to rewrite the rest? To get a truly native framework going? How would we do that?
Anyway, I wanted to thank you for creating this huge Sudoku puzzle for us. I have a great time tracing your steps and understanding NewtonScript and how it works inside NewtonOS. I have manually disassembled thousands of lines of ROM code, and it's just great fun to see smart code.
An MPW emulator! That’s very cool. What I really miss is the MPW environment though. Sometimes I daydream about doing some kind of dyld hack or FUSE filesystem to make MPW-style tool/editor integration work on MacOS/Linux.
IIRC, the current iOS app rules don’t prohibit emulation, just downloadable code. There are games running Lua scripts inside, right? Or am I confused? (That happens.) But that does make the ROM a conundrum.
I can’t think of any theoretical reason you can’t make a new native version of Newton OS that runs old apps — it’s more or less like making a new browser that runs websites. Of course, you’d need to reimplement some fairly hard things in the undocumented native part of the toolkit, like handwriting recognition.
One nice thing about working on the ARM4 to ARM6 was how clean the assembly code is. We didn’t have a source-level debugger, so I spent many many hours debugging C code in an assembly view, and it really wasn’t too bad.
It uses a m68k CPU emulator and implements a bunch of Classic traps, just enough to run most (all) the Newton tools like they were a regular command line app.
I love the seamless integration of the HWR into the OS. And the ability to draw and write anywhere. Todays devices all go a different path.
Yeah, the C code translates quite well back and forth to the ARM code. I have tried to understand optimized Intel assembler, but failed miserably ;-D
Since you were at Apple during what is arguably it's most interesting period software wise, what is your take on the present state of computing? How do you feel about the way Unix has overtaken everything and hasn't budged? What do you make of the period at Apple that gave rise to things like Hypercard, SK8, Dylan, your own NewtonScript, OpenDoc, and a host of other promising technologies that were axed?
Whoof. Well, certainly having the whole world reduced to Windows and Linux doesn’t seem ideal. Linux is great and I wouldn’t want not to have it around, but crowding out any possibility of a different approach seems long-term counterproductive, especially given the very long, very incremental nature of Linux kernel development. Even when there’s general agreement that something is a good idea, it seems to take 5-10 years to get done. (Look at what’s happened with containers, which AFAIK still aren’t even a real thing, just a concept superimposed on a bunch of independent features.)
In the Newton era it seemed like there were tons of great ideas flying around about processors, operating systems, filesystems, languages, etc., and more importantly there was room to feasibly take advantage of them in a product. Nowadays there’s no other realistic economic choice than to do your thing on top of the best open source stuff you can find, even if it’s not quite appropriate.
So I guess my primary negative feeling is that there are big important layers that have essentially become a monoculture, or sometimes a di-culture, and people don’t even try to innovate there any more. (Edit: talking about products here, not research, which thank goodness there’s still some of.)
That said, there are obviously tons of positive things that have happened. Notably, when Newton came out there was no internet that people today would recognize (or be able to connect to). There was no cloud computing giving you unlimited CPU billed by the second. No cell phone data network. We didn’t even have color LCDs. I mean, I could go on forever about the crazy stuff that’s been invented since then. So the thing that bugs me is really the lower layers that seem to have ossified a bit too soon (IMHO).
> Nowadays there’s no other realistic economic choice than to do your thing on top of the best open source stuff you can find, even if it’s not quite appropriate
What is your take on free software / open source in this regard?
I'll lay out my own bias. I think that the biggest qualitative inventions in computing occurred largely in places that had a well funded basic research culture whose goals were vague and allowed for a lot of play without managerial meddling. These places were on the 5-10 year timeline, some of them were government funded or aided, and there are far fewer of them today. We have no equivalent of ARPA, no Bell Labs, no PARC, and, well, even though Apple is the biggest company in the world, I doubt they'd come up with Hypercard today.
Open source and free software represent disparate, poorly funded activity, which is why most of what gets produced is innovations atop some of the ideas from 40 years ago. Younger generations of developers are likely to believe that Unix/Linux is everywhere because they are technically the best systems possible, not because it Unix was a well designed system for minicomputers in the 70s that was distributed for free with source, and also what became the basis for GNU etc.
I agree that the decrease in funding for big and vague projects feels like a big societal mistake. So many hugely influential inventions like ARPAnet, the networked office (PARC), and a whole book full of stuff from Bell Labs, came from a place where there were lots of smart people working on big long-term problems in the same context. PARC made WYSIWYG editors for the bitmap displays they made for the workstations they made to connect up with the network they made — none of those would have taken off the same way individually. And VC-funded startups that focus on one small problem for a few years are never going to fill that gap.
I’d point to CouchDB and other document databases. The unit of data is a freeform object (JSON is pretty close to NewtonScript objects), and you put a bunch of them in a container. Of course the capabilities are more sophisticated (e.g., map-reduce queries, replication), but the basic idea is similar.
@wrs thanks a ton for the work on the Newton, it still is my favorite computing platform. Unfortunately someone sat on my Newton 2000 an broke the screen argh, if not for that I'd be using it up to this day.
I'm unconvinced that battery life is important for something you use all the time.
Obviously it needs to last a day, but if you're frequently using it, charging it overnight isn't hard to remember.
If you don't often use it, battery life is critical because it's unlikely you'll remember to charge it... but if you're not using your PDA regularly, it's probably not a very good PDA (for your needs, anyway).
I think we all think we want long battery life. I just don't think in practice it matters.
There's an interesting difference (for me) between the recharge requirements for my phone, iPad, and Kindle. I charge my phone most nights (it'll last into the second evening pretty reliably on a charge), my iPad once a week or so, and my Kindle fairly rarely. I do quite appreciate the long battery like of the Kindle (it's an old 4th gen eInk display model, which doesn't go a whole month any more with heavy use, but even used a lot it still gets well over 2-3 weeks out of a charge).
I sometimes consider investigating rooting/hacking a Kindle to make it closer to a PDA - I suspect it's got a lot more computing power than a Newton did...
The weeks or months of battery life that my e-reader has is a game changer. It entirely changes how I think about maintenance of the device (ie. I don't).
True, but if it doesn't have power when you need it, what's the real impact? (Setting aside the inconvenience of, say, going on a flight and not having something to read.)
If your PDA doesn't have power when you need a critical piece of information, that's a real problem.
At least, I would love it if there were. Personally, my favourite device was a Palm, my brother's was a Psion, but the basic idea is the same.
How often do you hear people complain or worry about their battery level? All the time. How often do you hear people complain that their 5-inch screen isn't 4K Ultra Retina RGBA OLED goodness? The race to thinnest form factor has always confused me; what is really the use of having a razor in your pocket, rather than twice the mAh? The race to thinnest bezel has always confused me, too; what is really the use of a device you can't hardly touch without simultaneously operating it?
I think it would be very, very welcome to have a device that did the "standard PDA thing" extremely well (unlike modern smartphone OS'es), had "just enough" features, and oodles of battery life. Just the fact that there are modern crowd-funded initiatives to make "something like the Psion Series 5" shows that there is indeed interest (if not enough to wake up Samsung and its ilk).