It's not that "native software" has become less efficient, but rather that it is slowly disappearing.
how fast JS engines have become in the browser
I am not so sure. It is more like "JS barely runs a software that has a recommendation of 66 mhz CPU".Maybe it is about emulation the whole system but still I was expecting better.
Is there anyway I can find out the call flow of this JS program?
Like to see the actual dynamic call flow graph instead of just simple static flow analysis output.
Your phone is doing all sorts of weird shit behind your back as you poke about. Stuff that it's not supposed to be doing if app-makers were actually respectful of their users...
On that note, why does that crap take so long on smartphones anyway?
Another thing is that Windows would put certain native widgets (like file selection) on a higher priority than other program code. Android, at least, tries to put as much stuff in userspace as possible, so you might be experiencing the reality if everything run at the same priority.
That's very subjective, I'm in a minimalist passeist phase.
[1] Except for the non isolated driver model.
Meanwhile, on actual mobile hardware, the performance is so atrocious it's completely unusable.
No knock on the implementors of course. But the idea that this demo has some deep insight about the performance of native smartphone software is just inaccurate.
In general there's an arms race between hardware getting faster and native developers getting more and more lazy about efficiency. On the desktop, the hardware is finally winning--it's just too damn fast. Hopefully that will happen with smartphones too.
It is easy to take potshots at e.g. iTunes, but the real reason software "got worse" is not developers getting lazy. What happened is that expectations for CPU-intensive features rose (memory protection, ASLR, NX, encryption, low-latency audio, high-efficiency codecs, ClearType) while willingness to pay vanished. In Win98 times, you bought your music player from the developer (remember Winamp?) whereas now it comes free with your OS, which is itself probably free. So of course it is all half-assed now, but it's not "lazy" to spend resources on software someone will pay for, and not on software nobody will pay for.
You could absolutely reverse this, but it has nothing to do with native or web technology, and everything to do with changing consumer attitudes about choosing software.
> On the desktop, the hardware is finally winning--it's just too damn fast. Hopefully that will happen with smartphones too.
From 1995 until today, power consumption in desktop processors grew about 5-15x, depending on how exactly you measure. 5-15x more power on mobile devices is simply not an option, unless we have a "new physics" kind of breakthrough in both battery and thermal technology.
Here are some resources:
http://css.csail.mit.edu/6.858/2014/readings/i386/toc.htm
The official intel manuals
http://ref.x86asm.net/geek.html
http://stanislavs.org/helppc/idx_hardware.html
At my school and every other school I'm remotely familiar with, the knowledge needed to emulate a CPU would be covered in upper division computer engineering courses, and not covered by CS undergrads at all, certainly not in their first year.
To be fair, I did drop out a year later :)
[1] http://www.unibo.it/en/teaching/degree-programmes/study-plan...
I know this is mostly gone at this point, but it should not. The fundamentals are essentials. I often meet people who are totally clueless how a computer work and have CS degrees.
"How can you do C, it is so old? By now, we must have invented faster languages. Computers changed so much recently". Sure... Binary is now expressed with emoji.
https://www.youtube.com/watch?v=Z8qEz4DwFIg
It was challenging, but it was awesome (and finding that video to illustrate my comment is a blast of nostalgia). It wasn't any harder than most other CS or other sciences courses. And after digital logic, the other CS topics aren't really prerequisite or especially helpful in learning how simple processors work. I really appreciated getting straight to the foundations of how computers work and building up from there.
It wasn't like emulating x86 in javascript, but it was CPU internals. Up until I read your comment, I just assumed this was standard CS stuff.
I didn't learn much more than assembly 101. I doubt I could emulate much real hardware. Certainly not a PC of all things... A gameboy looks more accessible...
My university didn't touch on hardware until the second half of second year, and that was only one paper (strictly speaking, a computer engineering paper).
- Find some digitized assembly programming manuals from the time (I think the one I used was distributed with the Commodore 64, and ended up having several typos introduced by OCR).
- Write a tool to recognize, decode, and print out an operation when you feed it a little data
- You basically need to set up a loop of fetching instructions, interpreting them, then doing what they say. An actual CPU runs in a similar loop, and it generally doesn't stop until power is removed,
I think that after the classes I took, I read a lot of what other emulator writers said. This article is a basic look at the structure of an emulator, the theory behind them, and some different designs: http://fms.komkon.org/EMUL8/HOWTO.html
I don't understand why a basic understanding of CPU architectures isn't a CS fundamental everywhere.
Even if you have no interest in emulating a CPU or an OS, you really do need to know what registers are, how caches work, what interrupts do, and how basic IO happens.
At the very least it's a practical demonstration of one particular kind of VM, and - if you want to - you can generalise from that to VMs of your own design.
For web apps, not understanding these things can get expensive. Cycles, even cloud cycles, aren't free, and if you take zero interest in optimisation and efficiency you're literally throwing money away.
The code is here: https://github.com/copy/v86
https://github.com/copy/v86/commit/159f565de4dd99bff9b46c45a...
Nope, Windows 98 undefined instruction.
PS: Just came across the HN discussion around the said x86 emulator.
ELKS in javascript would be nice as well, you would get the ultimate speedy portable unix ecosystem in the browser. https://github.com/jbruchon/elks
Primarily due to the use of asm.js. I intend to implement a JIT similar to QEMU's tcg as soon as Web Assembly supports it: https://github.com/WebAssembly/design/blob/master/FutureFeat...
A note: the mouse position and acceleration seems to not be mapped correctly. It is often separated away from my local desktop mouse position. Maybe because the screen resolution is different?
Microsoft only goes against piracy of software they still support and upgrade.
They don't bother with the old software because it isn't worth it to sue or send a c&d letter because they don't earn an income with it anymore. So they don't lose income if someone pirates software they no longer sell.
In fact they gave away the source code to an early MS-DOS and MS-Word as part of their own open source license.
It is good PR for them if someone emulates their old software in the web browser and gives them free publicity.
Also it is quite a historical artefact, things like Active Desktop were truly cool back in the day. Plus the simplicity of the Win98 UI is a joy to return to.
Congratulations!
This allows you to connect to CORS enabled sites without using the WebSocket proxy. It talks HTTP on the serial port.
I want to add SNI support to tlstunnel so that I can tunnel to google.com by navigating to https://google.com.mydomain/ and having the snitunnel tunnel to http://google.com by reading the bottom-level domain names using SNI.
Using this with browser-http-proxy, it would be possible to tunnel to HTTP sites on a request-based level (making it easier to scale) and without relying on tun/tap on the server. Also it could serve as a fallback for non-CORS enabled hosts.
When I tried to run Internet Explorer and open a website, the window closed (crashed I guess).
I really want to open some common websites on Win 98 :D
I still remember you could crash remote computers by going into a public forum and post an image that linked to c:\con\con
Win 3.11 in the browser would be nice too, there is a whole ecosystem of apps. Windows95b would be slower, but still faster and smaller then Windows98.
I wonder how fast civ1 would run on freedos here.
That uses Em-DOSBox, which is more limited than v86 (which the OP uses) in some respects. I think v86 is loading hard disk sectors on-demand, which is pretty amazing compared to Em-DOSBox which has to download a massive disk image. On the other hand, Em-DOSBox has sound support!
The Internet Archive has 3.11 in the browser: https://archive.org/details/win3_stock (there's also various 3.x games as well)
This also uses Em-DOSBox.
I'm surprised MS hasn't open-sourced NT 3.x already.
Also, would be interested in seeing the orginal Win 95 (before OSR2). It was way way faster than win 98.
Of course, the 9x control panel is, in a way, a reinvention of the 3.x control panel. It's just a very clean one, because the 3.x control panel was a window full of icons, and the 9x control panel is an Explorer window full of icons.
I like how the cloud icons at the side of Explorer when not in classic mode still are drawn with a white background even if you change the colour scheme.
On a real machine, when I look at this old system I realise how little we have moved on in UI terms or the basic needs and requirements of a computer. You could do 99% of what you need to do on an old computer, other than duff website rendering and horrible security and power usage.
Perhaps because it doesn't run well for everyone?
Super cool! (I really can't get it to click on anything though)
The browser should run in the hypervisor and provide a real hardware virtual machine. Provide both ARM and x86, one is emulated and one is real.
Awesome project though!
My favorite 9x OS is 98 SE (which was a stand-alone release, not a service pack). But 98 "first edition" did add substantial features to 95: IE 4, multi-monitor support, sfc was added (which was useful because 9x got corrupted a LOT), ACPI support, better plug and play, and better hardware support overall.
98 SE just added USB support out of the box (which was a big deal for those of us trying to use USB mice), IE 5, WebDAV, Windows Explorer improvements, ICS, improved WMP, and all of 98 "first editions" hotfixes and updates. You could make 98 "first edition" into 98 SE more or less, but 98 SE was a nice thing to "just install" and have everything work.
My 1990s/early 2000s OSs looked like this: 3.1, 95, 98, 98 SE, ME, back to 98 SE, and then 2000, XP SP1, and beyond. Skipped XP pre-SP1 as it was a pretty shoddy release compared to 2000 at the time, and ran away from ME screaming.
my god that was ages ago.
IE in Win98 in Chrome in Ubuntu in VMWare in Win7
But I didn't expect it to :)
Edit: for what it's worth, FreeDOS boots there. No way to put in keyboard input though.
Could I use kermit, xmodem, ymodem, zmodem through com 1?
I found this very ironic.. It died while trying to die.
I am sure you put a lot of labor into this project.
You also seeded lots of ideas...
Thank you.
(command as in command.com)
None of the toy 'show HN' emulators that have popped up have a properly working mouse cursor....