| Home | Table of Contents | Please view with Internet Explorer (version 5.00 or higher) and enable scripting. For reasons, see Browsing This Web Site. |
You are at the home page of a small website that has grown out of an academic interest in studying what software actually does.
As our society relies ever more on computer software sold as a consumer product, I cannot be the only one who is troubled that we have hardly any means of inspecting the product independently of its manufacturer. Of course, a bug in Windows is not a matter of life and death. Nor even is the possibility that a software manufacturer might mislead its customers (or our courts), having calculated that there is no realistic chance of being exposed. Yet there is no other consumer product for which our society has accepted anything like so much reliance on the manufacturer to be open and truthful about the product’s behaviour and especially about defects. As we look to a future of new technology, in genetics, where we did not invent the machinery that we will nonetheless try to program, we surely ought not let it become our custom to trust so much.
For the programming of software on electronic technology, the best that our society seems to have managed is some notion of manufacturers disclosing their source code, whether voluntarily as so-called open source, else under court order. To me, this is analogous to requiring that manufacturers of food disclose their recipes or at least list their ingredients. It’s fine enough as far as it goes—and I am one who always reads the labels—but it’s no substitute for independent chemical analysis. Our food supply surely has more integrity, and those labels more credibility, because the manufacturers of food know that their wares can be analysed independently, even if the analysis actually is never done. We ought to have something like that for software, but we are nowhere near it. Indeed, we are so far from having it that many have never thought to expect it and many who might want it gave up long ago on ever seeing it.
This site exists as some record of what I see as my contribution to that goal: to develop practicable techniques for studying software without having the source code, without assistance from the manufacturer beyond the generally published documentation, and even without running the software. It’s a research effort that could do with some support, more awareness, and many more hands (well, minds).
Please always bear in mind that what you see at this site is here to demonstrate a long-running research effort into Software Analysis.
At this site, you can get free samples. Indeed, this site exists primarily to supply you with free samples as a means of encouraging your attention. Almost everything here is technical documentation for programmers, but there are also (or will be) the sorts of tips, traps, quirks, etc, that seemingly ordinary computer users take unusual pride in knowing.
Although it is not necessary that one who works at analysing software should be a programmer or have trained as a programmer—and, indeed, I did not—it is almost certainly not possible to become proficient at analysing software without also becoming at least competent at many of the skills required for programming, and it is surely not possible to do any useful software analysis without producing information that may in turn be useful to programmers.
This website has ended up as the repository for the public results of two fairly large studies, first into the API functions exported by various modules of the Windows Shell, and second into the Microsoft Visual C++ compiler and linker. Even the smaller (first) study has several hundred pages. Be aware, please, that both vary significantly in their degree of completion. Some pages tell you more than you might ever have imagined could be written. Others are nothing more than sketches. Everything at this site is the result of occasional work in what little time I find for writing up some of what I discover in my own research. Frankly, the research is something I would do for my own pleasure, being just that sort of person who is driven by inquisitiveness, but writing up is a chore. If only because I do not like chores, your choice at this website is typically between having a draft or unannotated list, or having nothing. This compromise is far from easy for me, but seems preferable to leaving those drafts and lists to moulder in a virtual drawer, awaiting time for perfection: even what little I get round to writing up is in far too many cases both more detailed and more reliable than you can find at Microsoft’s sites.
A third study has started, arising directly from the development of this new website, specifically from the site’s dependence on scripting. It started as a few tentative steps at alternative documentation of Microsoft’s JScript language but has developed into a wider look at Internet Explorer. Be warned however that this study is very much in flux. The material is published only as very rough notes. URLs are subject to change as the study takes shape. At any time, portions of this study may be abandoned and even removed.
To reach the studies, click one of the corresponding buttons in the banner. Each study has its own table of contents, which is more or less essential for navigation. If you see no banner with buttons for these studies, or no table of contents to the left of this page, then please check the Browser Advice before trying to pick your way through any of the studies.
Also given its own table of contents is a section of miscellaneous notes. Some deal with problems that have arisen in my ordinary use of a computer and which I happen to have studied as if for a commercial problem. Closely related are notes on features that have tumbled out of other analyses and which look like they might be useful to know without waiting for inclusion in larger work. No claim is made that the subjects of any of these notes are important in themselves. The notes are meant just as indications that software analysis can produce practical results, even when no help is available from the manufacturer of whatever software shows the problem.
All samples at this website, whether program code or documentation, are free. You pay nothing and you are owed nothing. You take each sample as is and you check it for yourself before relying on it in any way.
That said, I believe honestly that I have prepared all material here with at least as much care as could reasonably be expected even of commercial software or of commercial literature on programming. It is in the nature both of software development and of software analysis that there may be mistakes. If you discover a mistake and report it to me, then I shall respond at least as well as (and I hope much better than) any reputable software house would respond to news of a defect in a commercial product. However, you must understand now that although I am proud of my work, you should not think me liable for what you do with what I have done.
Regarding the material as intellectual property, I ask only that if you redistribute anything you find here, then please respect two requests that are surely so little burden that they ought not need to be mentioned in a civilised world: acknowledge me as author and do not alter the material to misrepresent me.
The commercially significant work associated with this website is the analysis of Windows system code before specific programming problems are even imagined, let alone met in any sort of real world. As a consequence of this analysis, many questions about Windows can be answered quickly and authoritatively—and if the information needed for the answer is not already known, it is probably within easy reach.
For many programming problems, you can get reliable advice on a design that you expect your own programmers to implement or you can get a solution coded efficiently for you. A long-standing specialty is kernel-mode programming, particularly of device drivers for file and disk I/O. If you don’t see much sign of that specialty here at this site, it’s because this site is for free publication in the public interest, not for showing professional work that’s done in your interest. Browse this site for long however, and no matter what topics you come across, you will realise that there are very few people anywhere whose work at anything is so precise.
To direct that sort of attention to your particular needs, see the Fee Schedule and consider a formal consultation.