Welcome back ! You lucky readers have been granted an extra post for this week ;)
Lately, I’ve been talking a lot about what I want this OS to provide to end-users as a whole. That’s because this whole project started from an end user’s rant, and I don’t want to lose focus on that and become one of those “CLI is just better” guys who favor a restricted part of geekdom after spending too much time struggling with gory low-level subsystems.
However, there are several classes of end-users. Some just browse the web, read their mails, organize their photos, listen to music and watch videos, play games. I’ve already taken a lot of care of them. But what about developers ? They are, after all, another major part of my targeted ecosystem and deserve just as much love. But before I go into more details about what I plan to do for them, let me tell you a story…
Learning how to program
When I was young and Windows 98 was still the norm, my father thought it was a good idea to teach me and my brother about the wonders of programming. I couldn’t thank him enough for that, but that’s not the point. On these days, he looked for something that could be suitable an elementary school boy. The needs where simple :
- Instant results : I’ve become a bit of a C/C++ freak lately after Python’s failure to fit my needs, but let’s face it, vanilla C/C++ is not suitable for child education. What’s exciting in programming, what gives one the will to learn, is the ability to control the machine and to make software just like the one you see on your desktop. This requires GUI programming to be available as soon as possible and extremely straightforward. In one word : RAD tools with a full widget library behind them.
- Power : My father didn’t want me to learn something like VB or another variant of BASIC, because he knew that meant that once I wanted to do something a bit complex I would have to learn something else. And also, another one of his goals was…
- Enforcing good habits : Another reason why C is not good as a first language is that it makes it easy to shoot yourself in the foot without even thinking about it. Memory leaks, bad pointers, unprotected headers… It’s easy to such bad habits that when you begin to work on the thing and have a hard time forgetting them. Hence the need for something cleaner.
My father’s answer to those criteria was to buy us a version of Delphi along with a good book about it. And retrospectively it was quite a good choice. It was certainly ridiculously easy to make multimedia GUI applications in Delphi, it took us a lot of time before we reached the limitations of Delphi’s extensive standard library (and its wonderful help system), and Pascal was not defined as an educational language for nothing as far as code cleanness. It wasn’t until I moved to Linux some years ago that I smashed in the “windows only” wall and realized that it was time to go somewhere else, and by then I was strong enough in programming mastery to do that in an effortless fashion.
Now let’s go back today. Should I teach some young lad about programming on Linux, what would I choose ? Ah… Tough one… I don’t know of any RAD tool on Linux that’s nearly as powerful and easy to use as Delphi. Kylix was a joke to begin with, and it seems that the “real programmers don’t use RAD tools” mentality has had some annoying side-effects as far as open-source IDEs are concerned. The closest thing I could find was Qt Creator, and let’s face it… we’re not quite there yet (whoops, what a messy GUI, my screen is filled with controls and makes me want to run away screaming ! What’s a “signal” ? What’s a “slot” ? Why do I need those, why can’t I just double-click on that button and write code right away ?).
There is a similar tendency on all major platforms, and it is highly annoying. Because if we can’t give children the will and the talent it takes to hack their computer anymore, who’s going to code tomorrow’s software ? After a transition period of horribly coded mobile applications, are we reaching an apocalyptic future of computing where software will only be coded by Megacorp inc. and computers will go backwards on the evolution scale to the status of dumb tools which can’t do more than what Megacorp lets them doing ? (OSnews has an interesting article on the subject)
I refuse this possibility, and will fight it as much as I can. So from that we extract a first design criterion of this OS’ programming tools and APIs : programming must be made education-friendly, by offering an rapid, powerful, and clean way of developing GUI software to those who look for it. About the quest for an education-friendly programming language, I’ve been thinking of a redesign of the C++ syntax for some times : code would be translated to C++ and then compiled by a usual C++ compiler, but there would be things like Python’s enforced indentation to make the life of teachers easier (Of course, for those old-school devs who want to code in C, debug using printfs, and have nothing more than a glorified text editor and a shell on their desktop, the IDE would provide that too, just like Delphi did to some extent)
Say no to the pixel dictatorship !
Comrades, citizens of the computer world ! For years, you have been enduring applications and controls shrinking in size and becoming unusable when using your screen at native resolution, web pages which exhibit annoying scrollbars when your screen is not like the author’s, and tablets which blur out phone apps (when they are compatible with them) instead of even trying to use screen estate better. IT DOESN’T HAVE TO BE LIKE THIS ! (and all we need to do is to keep talking)
Megacorp inc. (in this case embodied by Apple) has been lying to you, pretending they were going to fix the problem years ago. Nothing has been done ! Deadlines are reported forever in favor of more lucrative options like work on touchscreen phones. Their tone has changed from “applications will scale across every computer” to “a mobile computer is not a computer”. Obviously, they have fallen to the insane whispers of an ages-old pixel which tries to keep its inexistent relevance and try to hide this fact in diplomatic moves, HOW LONG ARE YOU GOING TO BUY THAT ?
Comrades, the time has come ! Smash the chains of pixel-based positioning ! Embrace inches, centimeters, and adaptive application layout that scales well across multiple screen sizes and input methods ! Make porting an average application to a tablet PC a matter of recompiling the source code ! Instantly see how your applications are going to look like on every single device the system runs on using the official IDE’s “device portability” toolkit (note : afaik, recent releases of Adobe Flash already provide something like this) ! Let’s end these days of terror and incompatibility with a revolution towards a better world !
Or, to sum it up in one sentence : the GUI part of my programming tools and associated APIs will be constructed with pixel independence and portability of applications across multiple devices in mind. One of the things I plan to try is to store the application’s UI in a device-independent way. At first launch, or on DPI change in input or output, the OS would automatically read those device-independent files and “compile” them into a usual pixel-based form. This way, we would get the performance of pixel-based positioning on running applications AND the portability and flexibility gain of storing only the UI layout. The performance impact of that “compilation” would be, even on older hardware, so small an average user wouldn’t even notice it.
Put emphasis on OS features
I’m going to be accused of trolling for this, but so be it : from most users’ point of view, operating system software has not dramatically changed since the second half of the 90s. The UI has been tweaked for better and worse, bugs have been fixed, application software and hardware has grown more and more powerful, but all in all nothing major has been touched in the basic mechanisms. We still have user/admin rights, buttons, list boxes and combo boxes, file explorers, control panels, and a network icon at the rightmost end of a desktop panel, next to that prehistoric digital clock, which tells us if the network connection is still alright and allows us to tweak it. Oh, and that good old desktop that’s just as messy as your real-world desktop, too.
I don’t plan to introduce a revolution and change things when it’s not necessary, puzzling users with round popup menus and triangles replacing rectangles as the main control shape. But I do plan to fix a lot of old legacy mess that current OSs can’t touch without alienating some users and breaking application compatibility. And for that, I need the help of software developers. For this to work, they need to understand the changes in the global OS philosophy that will affect the way they develop software (like capability-based security and device-independent UI).
To this end, I’ll, of course, provide a big “Application developer’s manual” that will include everything an average kid needs to know (except experience) in order to become a good developer. With a chapter of that manual or even a separate manual being dedicated to people who learned to develop for another OS and want to know directly what’s new, too. But for those seasoned developer, a manual will not be enough. Even if they do read it, they’ll have a natural tendency to go back to their old habits. Fighting this tendency is an everyday hassle, and they’ll certainly NOT have a look at the manual everyday.
So, as vague as it sounds, I think that the official IDE and other programming tools should be conceived with the system’s policy in mind. As an example, when you make an UI that’s cluttered on a tablet and have selected “tablet” as a target platform, a warning would be issued, kindly asking you to have a look at how your UI is like on a tablet.
Well, that’s all for now. Thank you for reading !