From 3a3129ac247346ec13807fdffad7c800e1f9e4f6 Mon Sep 17 00:00:00 2001
From: Linas Vepstas
-The GnuCash pages
-provide overview & introductory material about GnuCash, and in
-general present a glossier, more accessilbe format. This page is
-aimed at developers, not users.
+There are currently several different versions of GnuCash. The current
+stable, production release is gnucash-1.2.x and is Motif based. However,
+development has all but switched entirely over to Gnome; the Motif version
+will probably eventually fall to the wayside. (Note that other versions, such as KDE,
+Java or PalmPilot have been discussed and/or started. More about this below).
+The latest Gnome version, and any latest version in general, is currently
+available only via CVS. There are precompiled versions available, but these
+are usually only for the stable releases. Don't use the unstable versions
+unless you are looking for excitement and adventure.
-We believe that a GNU GPL project should provide goals and motivations
-at both the large and the small scales, in order to focus and motivate
-the developers. Over-arching and grand goals are difficult to grasp
-and carry out; yet their lack serves only to dissuade the grand
-thinkers. A list of detailed goals may be mind-numbing to the casual
-reader; yet, without them, the roll-up-your-sleeves-and-do-it
-coder cannot know where to begin. Detailed goals lend a concreteness
-to the discussion: they can be architected, designed and coded at any time
-by coders of any ability. Thus, we present a list of goals, large and
-small, with the hope that the small goals will fall quickly, and the
-large ones shall turn into a multitude of small ones.
+This document is divided into several sections. The first deals with
+archititectural and philosophical design issues. The second deals with
+interesting technologies. The third deals with desirable features and
+functions.
-
-
-
-
-
-
-
-
-
-
+First, one must maintain a clean separation between the data structures
+and the GUI that manipulates them, along the lines of a
+Model-View-Controller
paradigm. Lists of accounts and the transactions in
them can be thought of as a representation of financial data,
a Model. The GUI that adds, modifies and deletes these should
be thought of as a manipulator of the data, a Controller.
-The current Motif GUI is just
-one possible manipulator of the data; other GUI's,
-some simple, some complex, some possibly based on other graphical
-toolkits (Qt, gtk, emacs) should be possible.
-The View of the data is a modern way of saying "report".
-One typically does not view, or want to view all of the data,
-but only a subset: say, only the transactions for the month of May,
-or only the account totals for certain accounts. The concept of "View"
-in fact consists of two very separate ideas: the Query Engine
-and the Report Generator. The Query Engine is used to extract
-a list of transactions from the Model database, based on a set of dates,
-a set of types, or other criteria. This list is then typically
-edited by the controller, or possibly printed. The Report Generator
-is used to create summary reports about average account balances,
-or profit&loss statements, or cash-flow statements, or may be graphed
-as pie charts of asset allocations, or graphs asset value over time.
+The Motif or Gnome GUI's are just two
+possible manipulators of the data; others, based on e.g. Qt/KDE,
+emacs, Java applets or Java servlets should be possible.
-
-
-In particular, with respect to OFX & online banking, one should be able to think
-of GnuCash as a very special browser, capable of browsing financial web sites.
-Instead of talking HTML/HTTP, it would talk OFX or Gold with the remote
-server. Besides just statically viewing ones bank account, it should also
-allow bill payment and other account manipulation.
+However, GnuCash also needs to deal with multiple distributed data
+sources: stock quotations from the net or transaction confirmations
+from online banks and brokerage houses, or more mundane sources,
+such as file imports, or merger of data from several users. In this
+language, the concept of a global Model-View is dated, and somewhat
+inappropriate. Rather, one is worried about how data is represented
+in the local address space of the GUI, how the GUI manipulates it,
+how date is brought in and merged from external sources, and how that
+data is again output, whether to a file or a local or remote database.
+Thus, the View is essentially a local data cache: its the data that
+is immediately present and being displayed, reported, and manipulated.
+The Model is the abstraction of that data that the GUI (the controller)
+can act on.
+
+In GnuCash, the Model is implemented via the Engine API, and
+the View is the data that is currently in the Engine. Thus,
+the Engine is a set of programming API's that the GUI (or a script,
+or even a clever command-line-addict) can use to manipulate the data.
+Currently, the Engine is fairly poor, and matches the data types and
+formats that the GUI can manipulate. These include transactions,
+transaction entires (splits), accounts and account heirarchies.
+The Engine has a very simple apply/commit model, and a simple
+query mechanism for generating reports and views.
+The Engine currently handles only a small set of data sources:
+it can import and merge in QIF's, it can read and write its own
+binary byte stream, and can get stock quotes from the net.
+However, since the Engine is meant to be the interface between
+the GUI and the financial data, it is meant to be able to do much more.
+
+In particular, it should be possible to back the Engine onto an
+SQL dataabase, and thereby enable multiple users and/or intrface
+to more complex accounting ssytems. The engine should also be
+expandable to handle other sources of data, such os OFX,
+Integrion GOLD, the Open Trading Protocol, the OMG CORBA
+General Ledger submission, the IBM San Francisco business objects,
+or closer to home, Linux Kontor. In particular, it should
+be possible to use GnuCash not only to view data from these sources,
+but also to manipulate it and send it back.
+
+The above structure then leads one to view GnuCash not so much as
+a tightly integrated application, but a loose federation of parts
+objects, libraries and interfaces. In order to facilitate the
+glueing together of these parts, as well as simplify the questions
+of customizablity, change and rapid development, GnuCash makes use
+of an extension language to glue the pieces together. The extension
+language that is most central to Gnucash is Scheme, although some
+of the interfaces are also available through Perl.
-
-
GnuCash Project Goals
-GnuCash
-(previously known as X-Accountant) is a personal finance
-accounting application. The project goals are to create a world-class
-GPL'ed Open Source personal financial application for GNU/Linux and other
-Unix's. The project is the result of a merger
-of the GnoMoney project with X-Accountant development. There are currently
-two versions: xacc-1.0.18, and gnucash-1.1.x. Version xacc-1.0.18
-is written in Motif, and is considered to be stable/production quality.
-You can read more about X-Accountant at its home page
-
-http://www.cs.hmc.edu/~rclark/xacc/index.html. Versions
-numbered as gnucash-1.1.x are the current development
-versions, and are unstable. GnuCash is in active development;
-this page is an effort to summarize the project goals and status.
+The people behind GnuCash
+aim to create a world-class GPL'ed Open Source Personal Financial
+Application for GNU/Linux and other Unix's. This page aims to review
+some of the technical and development issues surrounding this product,
+to be a kind of 'FAQ' for developers and contributors.
+To get a better idea of what GnuCash
+is and what it does, visit it's home page.
News
-
-
-
-Meta-Architecture Goals
-
-
-Architectural Goals
+There are some over-reaching design principles and philosophies that
+we hope to maintain. Some of these concepts and terms are introduced
+in this section.
+
+
+
+Under construction
+The stuff below dates back to Summer 1998 and is hrribly out of date.
+
+Feature Requirements
Create both a personal-financial accounting system, as well as a
business accounting framework. Although these two goals may seem at
odds with each other, there is no reason why they could not share
@@ -145,12 +134,9 @@ a ledger window, and a report generation mechanism. The tools
created to allow one should be portable enough to be deployed in the
other application as well.
Concrete Architectural and Development Goals
-The following is a list of the larger, more abstract, and more difficult
-architectural goals.
+Features and Functions
+ More ...
-Incremental Development Goals
-The following is a list of goals and "bug fixes" that should be solved
-immediately, independent of the major goals.
- cvs -d :pserver:cvs@linas.org:/home/cvs/cvsroot login -- The password is "guest". To get a copy of the source, do a -
- cvs -d :pserver:cvs@linas.org:/home/cvs/cvsroot checkout xacc -- Note that various versions can be accessed with tags. - For example, the tag xacc-10b17 will get you version - 1.0.17 and the tag xacc-11b6 will get you version 1.1.6 - In particular, the latest code in the 1.0.x series (the stable series) - is available on the branch xacc-10-patch. For historical - record, you can view Robin Clark's original source from October 1997 - at xacc-09a. Things have changed a *lot* since then. -
- (March 1988) -
- - -
- -
- -
- Status: Essentially more-or-less done (July/August 1998) -
- -