Remote-Anything
Technical Corner

Home

English version Deutsch Français

Home | Buy Now | Products | FAQ | What Customers Say | Press | Prices | About Us | Support

From time to time TWD Industries receives technical inquiries. Some programmers ask us how we can manage to create a product which has more features than Symantec's 80 MB pcAanywhere... while RA's footprint is only 80 KB!

Here is how we did it:

 

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.

Home | Buy Now | Products | FAQ | What Customers Say

*

Press | Volume Discounts | About Us | Contact


Copyright © 1998-2007 TWD Industries SAS
All Rights Reserved