|
RA has been created
by software engineers who have been working for top five software
publishers. The choices made for the architecture and the
implementation of RA were dictated by efficiency, not because of a lack of
experience or because of 'strategic' alliances (the
kind of alliance that makes the latest version of your word-processor
so slow that you need to purchase a new PC every two years).
We have simply tried to make RA (and the DS)
as good as possible, from scratch.
RA uses libraries only if the source code is available,
readable, free and
portable.
RA does not use
Windows internals like system hooks or low-level drivers.
RA is written in
portable C++ code. This allows us to work on Mac and Unix
versions.
Portability
has some interesting board effects which make RA's code:
smaller
faster
more reliable
easier to
maintain and to enhance
Optimization is a
dying art but we did our best to keep it alive, making RA small
and fast.
We tried to apply
the following common-sense method:
make it work
(alpha
versions)
make it work
well (beta and retail versions)
make it work
fast (free updates)
We considered RA
users as the most valuable source of feedback.
Despite our utmost
efforts, RA had bugs. When a bug was found, we posted corrected
versions as soon as possible, most of the time in days, sometimes in
hours.
But at other times,
RA did not work well on one of the dozens of existing Win32 Windows versions:
(add the
service packs, the versions of Internet Explorer and MS applications
modifying the system like Internet Explorer, Office or IIS and you end with
more than 400 different platforms)
2007
- Windows Vista (8 versions planned under the same name)
2003
- Windows 2003 Server
2002
- Windows XP Media Center
2002
- Windows XP Tablet
2001
- Windows XP
(new GUI)
2000 - Windows Millennium - 4.90.3000
2000 - Windows 2000
1999 - Windows 98SE - 4.10.2222 A
1998 - Windows 98 - 4.10.1998
1997 - Windows NT Server
1996 - Windows NT4
(new GUI)
1996 - Windows 95 OSR2.5 IE4 - 4.00.950C
1996 - Windows 95 OSR2.1 USB - 4.00.950B + USB
1996 - Windows 95 OSR2 FAT32 - 4.00.950B
1996 - Windows
CE
(hand-held PCs)
1996 - Windows 95 SP1 - 4.00.950a
1995 - Windows 95 - 4.00.950
(new GUI)
1995 - Windows
NT3.5.1
1994 - Windows NT3.5
1993 - Windows NT3.1
(NT introduced)
1993 - Windows for Workgroups 3.11 (free 3.1 upgrade)
1993 - Windows 3.11
(free 3.1 upgrade)
1992 - Windows for Workgroups 3.1
(network
support)
1992 - Windows 3.1 (bug fix)
1990 - Windows 3.0 (more stable
version)
1987 - Windows/386
(multi-application)
1987 - Windows
2.0 (overlaping windows)
1985 - Windows 1.0 (development began
in 1981)
1981
- Licensed MS-DOS to IBM (and PC-clone vendors)
1980
- Acquired QDOS (DR CP/M cloned in 6 weeks) for $50,000
1975 - Microsoft founded |
From 1995 to
2003,
Microsoft shipped 8 major
versions of Windows.
That's a
version per year. |
Most
of the time, problems came from system DLL isssues. The
Windows DLL issues are a very time consuming and frustrating
subject. In addition, users do not understand it. For them, as
Windows is not crashed, that's your program which has a bug, not
Windows.
They do not
imagine that "Windows" is not one platform but
merely a bunch of operating systems written by different teams which
sometimes tried to maintain compatibility. This may not visible
for the
user, but, for a programmer, even the way to write a program changes
depending on the version of Windows you are targeting to use. The
Windows API offers functions which, when available on all the
versions of Windows (a rare case indeed), do not behave
the same way on different versions of Windows.
They may work, not
work, provide different results or simply crash your application or
the system. Sometimes, they require the programmer to give them different values in order to
make them work properly. They can also prevent your application from
running, even if you do not make use of the offending function (you
have to detect at startup which version of Windows is in use, and if
all the functions you intend to use are available).
Some
calls no longer work after a service pack, a patch or after another
application has been installed, or their behavior can change. This
makes it very difficult to make "reliable" programs
because what is working today may fail tomorrow -on the same machine
and with the same version of Windows!
RA and DS avoid
adding to the problem by using one single executable file per
program. No DLLs, no system hooks nor low-level drivers, so, no conflicts.
Further, the Windows
API documentation contains many errors and missing
information. Many calls are documented but not implemented in the Microsoft C++
compiler -or reciprocally. When writing a
program for Windows, you have to deal with the bugs:
you may write
(easy
to find and fix)
of the compiler (tricky
to find and easy to patch, we have had to write many missing
calls)
of the Microsoft
documentation (you end with your own
'revisited' version of the MSDN)
of all the
different Windows versions (hard to
isolate and identify and difficult to patch)
Most Windows bugs are
difficult to isolate because they will only show on one or two of
the 24 existing "modern" Windows versions (users still
using Windows 3.0 or older are now very rare). A programmer cannot test each new line of
code on 24 PCs. Programmers do not live long enough for this. A quality engineer can do
this but there is nobody
able to check all the features of a program on 400 PCs as it would
be necessary to be reasonably sure that the program is 'stable' on a
platform that can present so many different implementations via
service packs, patches and other applications.
Not convinced? OK,
see by yourself.
Here is a piece of Microsoft Office Visual Basic's source code:
(yes, it's real)
//
Function: RunCommandEx
// Synopsis: runs the given command in the
current session, more robust
// than RunCommand
// Arguments: none
// Returns: S_OK if success
// History: October 3, 2000 -
created [name withheld to protect the guilty]
HRESULT RunCommandEx(LPCWSTR szCmdLine) {
DWORD dwTry = 0;
HRESULT hResult = S_OK;
// try run
command 3 times at most
while (dwTry<4)
{
hResult = RunCommand(szCmdLine);
if
(hResult!=E_FAIL) {
// we succeeded
break;
}
dwTry++;
}
if (dwTry==4)
{
ATLTRACE(L"COuld start the command even we tried 4
times\n");
ASSERT(FALSE);
}
return
hResult;
} |
Robust? Safe? Clean?
Useful? Hmm... not really.
What Microsoft
developers think about it? An internal Microsoft memo sent to Bill
Gates on Febuary 21, 1997 is clarrifying the question:
"The Windows API is so broad, so deep, and so functional that most ISVs would be crazy not to use it. And it is so deeply embedded in the source code of many Windows apps that there is a huge switching cost to using a different operating system instead. It is this switching cost that has given the customers the patience to stick with Windows through all our mistakes, our buggy drivers, our high TCO total cost of ownership, our lack of a sexy vision at times, and many other difficulties. Customers constantly evaluate other desktop platforms, but it would be so much work to move over that they hope we just improve Windows rather than force them to move. In short, without this exclusive franchise called the Windows API, we would have been dead a long time ago."
-Aaron Contorer, Microsoft head of C++ development
Why Windows is so frustrating -even for Microsoft employees?
Microsoft never tried to deliver technology, what
they did was to apply a very high tax to the whole IT market.
Today,
Microsoft is so rich that
even governments can't enforce justice decisions against it.
Common-sense suggests
to write code for only one unique version of Windows. But with a new
(incompatible) major Windows version every year your program would not have a
chance to be a commercial success. As John Walker, founder and CEO
of Autodesk, Inc. stated it : "If you want to enter the Gates,
you have to pay the Bill". Again and again, every year.
Please help us. When
you have a problem with RA, read the manual and the FAQ, and do not
assume that we hate Microsoft if we say that this is a Windows bug.
This is only a technical fact, not a trick we have elected to use
when RA does not work as expected. Everyone has to admit that
Microsoft has been a major contributor for the computer industry
whether you like the way they did it or not.
At TWD Industries, we are just trying to
make this world a better world -for everyone. |