It's really hard to summarize all of Project MAD; it's one of the reasons why I didn't shy away from that particular three letter acronym. Perhaps more important, it's hard to explain why I feel so darn sure that I have stumbled onto something meaningfully important. My descriptions of things can get all tangled up, so it's easy to think that the core of the idea is equally tangled, equally lost. But I genuinely, truly, believe that there is something fundamental here.
Our world has many more computers than ever before, but each computer we sit down at can feel just as confining as the last. We're chasing after the feeling of being empowered by computers, the feeling that computers are the future, not merely the present. I suspect that's part of why so many people are jumping wholeheartedly into AI fever; they've been looking for a long time for something that will make computers feel infinitely deep, again. Like you can get lost in all the possibilities that a single computer can offer you.
In the era of the internet, it's become less important that a single computer feels like it contains infinite possibilities, because we can always gesture out the window and say, infinite possibilities are out there. But that answer is less compelling than it seems, for numerous reasons that I don't want to get into right now. A single computer can be an infinitely flexible tool, and we understood that from nearly the beginning. Computers on wheels become cars; computers with cameras become security guards; computers with arms can weld or do other labor. But many of these implementations moved away from depending on normal computers, by which I mean “the same as we use at home”, and with good reasons. Security and stability, mostly, but also… also deeper reasons.
Computers are generally split, and again with good reason, into utility and user-facing computers. Utility machines exist to get work done; user-facing machines cater to the person in control of them. What is lost in this description is that any user-facing machine could do work, even if not every utility machine can be user-facing. But that's not what we see, not what we feel when we work with user-facing machines. Even though you might be part of a larger system with great capabilities, it doesn't feel like it.
The reason is because programmers need to reinvent the wheel, whenever they try to merge two machines into one. It can be confusing to try to wrestle with the very concept of controlling one machine from another, not because that's difficult, but because it feels like it should be a solved problem already, and it isn't. There are solutions, but… as my last post tries to explain, perhaps poorly, they are kind of poor solutions. They were never meant to do what we really want them to do.
When I talk about remote procedure calls and the unified system API, what I'm talking about is controlling one program from another, one computer from another, in the same way that a programmer controls their own program. If one of those remote computers, one of those programs, is in charge of handling hardware devices, then controlling one program from another means controlling hardware devices as though they were just your own bit of software. If you use those remote computers to run software, to provide services, they should be as easy to interact with as if you were running software on your local machine. The services should always be there, ready to serve you.
But most important, you should be able to write a program that just does stuff. Not only doing stuff on your local machine, because as I just said, most user-facing machines don't actually do stuff by themselves. There are other computers that do stuff, while your desktop, laptop, or phone just… well, provides you access, in theory. In practice, because there are fewer standards than we'd like, figuring out how to control things that you own, even things designed to be controlled, can be an exercise in frustration.
Because the people who make those devices are all forced to reinvent the wheel. Collecting all of the various hardware capabilities of a household's machines, or a user's personal stuff, into one gestalt system isn't a standard function built into computers, and neither is it straightforward to make good use of them once you have them collected. If you want to connect multiple devices, you have to work with multiple vendors' proprietary and non-standard interfaces - and many, perhaps most, of these interfaces weren't meant to be controlled by another piece of software, but only by an interactive user. That, too, is because they would need to invent that particular wheel. They would need to secure it, and take responsibility for what happens when it leaves their warehouse and enters your home. It's a lot of risk for little if any monetary reward.
The reason why these problems are unsolved, is that the alternative is reinventing all of computing. That sounds extreme, but this is the argument I've laid out: software as we know it is not meant to connect multiple computers together, it is meant to be run on one single computer and nothing more.
This, ultimately, is the problem. The big one. It's the axle that must pivot if you want the world to change. Run a single program that spans two or more computers - but it's not just about running it. It's about teaching everyone who wants to program computers how to control two machines with one program. Or three computers, or four. Or an infinite number.
How do you simplify the process of making that program so that just anyone can do it? So that Joe Shmoe, who has a day job and doesn't want to go to college for programming, can hack together a quick and dirty program that makes use of all the computers in his house? What does a programming class look like, when you are teaching children to not merely twiddle with bits on a single computer, but to bring a motley assortment of machines into a room and unite them into a grand symphony, all orchestrated by a few words of text?
How do you let someone explore the infinite depths of possibility that exist within their computer? Those depths exist, but we cannot explore them, not without reinventing wheels over and over. We shouldn't need to re-solve problems that others have good answers to, because our amateur efforts will be… amateurish. Any skill we lack, and problem we can't tackle ourselves, derails a project.
Project MAD is all about making the capabilities of a computer available for you to tinker with. It is about the capabilities of a single physical machine, but also, about all the capabilities of all the things you own, thrown in a pot and stirred. It's about having a spare computer running in a closet that takes part of the workload that would be on your desktop, or your laptop, or your phone, and you don't have to set it up specifically to do those things.
It's about taking a computer that has worked fine for years and still making use of it even when you replace it with a faster and better one. It's about dumpster diving and collecting random pieces of hardware and making a real workhorse out of them. It's about buying an under-powered laptop and not caring, because as long as it's in a network with other machines, it will be just as powerful as any other. It's about finding creative uses for old TVs and monitors, beyond being picture frames.
And from the corporate perspective? It is, genuinely, about creating new products, products that people want, and it's about being able to just turn the crank and trust the process. It's about creating an operating system image that you barely touch when you ship a product. It's about shipping a hardware product and not meddling with software at all. Imagine, not worrying about completely unrelated software that is only necessary for your device because you don't know how to let consumers control your hardware except with complicated software stacks running on top of full operating system images.
It's also, on some level, about going back to computer hardware being purely a commodity, able to be produced cheaply, and not needing to be shiny, chrome-plated best-in-class specs to be useful. It means that when our need for computing power increases, we don't need to cram more into a single chip, with all the heat issues and power consumption that come as a result. It means that the top of the line chip you buy this year will work together with the chip you bought two years ago, and the chip you will buy two years from now, instead of them all ending up in the garbage.
At the same time, it's about creating hardware that really is genuinely unique. About creating new processors that are optimized for a specific task or problem, without needing to invent a new OS to run on them. It's about creating hardware VPN devices that will let you connect securely to your home system while traveling, or your work system from home, just by plugging them into an otherwise unsecure system. It's about creating software that is secure because the hardware it runs on can't be overwritten or even looked at by others in the network.
But it's also about taking your computing environment with you. If you can expand one computer by connecting it to another, then have your phone really, genuinely be your computer. Even if you aren't plugged in, massive processor-heavy tasks can be run on a machine that is plugged in, and all your phone has to power is the wifi. But it's more than just power. The system you sit in front of being the same as the system in your pocket, means that some important things aren't locked in one place or the other. Your calendar and messages, phone calls and podcasts. Your music and movies, your games and documents. You shouldn't need someone else's permission to have things you bought accessible anywhere.
All of this - all of it. Every last bit of this comes down to the idea that any program, written by just anyone, can unite multiple hardware systems, and do it as easily as we can write any other program today. When you can do that, your system gets more powerful because other systems are available. Your system gets more flexible when you have more options. You can have a definitive “core" of your system that expands to fill any container you put it in. Vendors can compete to be a thing worth adding to your system.
But most of all, once it's trivial to unite systems, we are no longer trapped within one. In a world with the internet, it feels weird to suggest that we are trapped. My mother bought a laptop just a few years ago that is under-powered and can't be upgraded, and all she really knew was that it was “slow”. She hardly needs much from it - she writes, mostly - but it was still inadequate. Someone sold a computer with so little ability that a writer feels limited using it, and there's simply no way to make it more powerful by adding to it. You can't add memory, you can't even add disk space - not except SD cards, which doesn't help when Windows is complaining it doesn't have enough disk space for OS updates.
If she could just use that laptop as a dumb terminal for a session on a more powerful computer, she would be happy. But she's not tech-savvy; me, I am, but I still struggle to combine my home server, main PC, assorted Raspberry Pis, and multiple laptops in any meaningful way. I run some applications on the server as web apps (including the one I'm using to write this, before posting), and I store files on the server so that I can use them anywhere, but all those solutions are …weird. If I tried to explain any of them to my mother, or frankly anyone else in my family, they'd dismiss the possibility. Too much effort for a result that can't just be used. Even I have to work around the limitations, get frustrated by the nuances and complications. Even I chafe at making sure all my operating systems are up to date, especially when it's all redundant. Even I, a tech enthusiast through all of my life, would like to have my entire tech world be part of a single, simple system.
It's one think to talk about the pie-in-the-sky dreams and hopes I have for Project MAD as being features. I am reluctant to promise features because it feels like I'm trying to plate the project with chrome and gold, garnished with diamonds to give it that extra sparkle. Clearly, from this post, I believe that the potential exists to do great things with the Project.
But it's more correct to say that I am constantly, constantly disappointed with computers. I am disappointed with Windows. I am disappointed with Linux. I am disappointed with Android. And while I haven't used Macs and iStuff in a long time, I don't think I'd feel much different about them, because it's not about the vendor. We simply don't have solutions to some problems, currently. We can make the best of what we have, but it's not the same as having some very real, very frustrating problems just be… solved.
Maybe Project MAD can't do that. Maybe I can't. Maybe all of my philosophizing and promises will turn up empty. Who knows, maybe I'll get in a car wreck tomorrow and since there's nobody else on this project but me, it will all vanish into the aether and be forgotten.
But the problems are real. The fact that we are working off of a flawed model is real. MAD may not be The Answer, but it is an arrow pointing in the direction we need to go. If it's never more than that, but if it succeeds in being that, then I'll be happy. If I can never make the OS, if I can never make computers that snap together like legos, if my model for distributed programming is discarded and never looked at again… but if, if all of my efforts point the way to a solution later on, then that's fine.
Part of calling it Project MAD is that I'll understand if the MAD solution isn't the one everyone embraces. But I know that there is something here. I just… don't know how to convince anyone else.
No comments:
Post a Comment