The Newton Application Architecture (1994) [pdf]
waltersmith.us
waltersmith.us
First, thank you for your work, and thank you for sharing this. Definitely an interesting piece of computing history.
What led you to Self as inspiration for NewtonScript?
At what point in the development of NewtonScript was the decision made to use it? What else was considered?
What do you think of Io?
Was Unicode support a tough sell or an obvious must-have? Was it UTF-16?
http://waltersmith.us/newton/SELF%20and%20the%20Origins%20of...
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.
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.
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.
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 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.
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.
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.
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!
Anyway not really a question... just glad to hear you are still around and kicking and thanks for the inspiration!
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.
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.
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.
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
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).
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 don't see a way out of this pattern, really.
(For the young 'uns: https://www.youtube.com/watch?v=u6qxixgQJ4M)
For those that would like to check a bit more about the community that exists around it, there a really nice documentary at https://lovenotestonewton.moosefuel.media/
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.
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...
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).