===== WinLibre Common =====
It seems that there is great overlap between different projects. The purpose of this page is to identify common parts and divide them properly between the various projects and also establish interfaces and conventions where appropriate (e.g. XML format, GUI). The goal should be a coherent WinLibre suite.
==== Some Observations (By Gil Tal) ====
=== Similar Projects ===
The Python rewrites, the MacLibre and the Updater have a lot in common. I'm not sure if both Python rewrites are different or if they simply two variants of the same project. The ControlCenter should launch the Updater when necessary. Here is a first cut of division of work:
* In fact, [[python_rewrite_bohdan|my version]] is pretty much a combination of the [[python_rewrite_bertrand|installer]], [[control_center]] and [[updater]]. When thinking on the GSoC application, I've felt that a separation of functionality into three parts would just create a tremendous duplication of efforts. Also, I think that when [[python_rewrite_bohdan#manatee_core|the Core]] is complete, the other pieces are just a matter of time and patience. --- //bodq 2005/06/30 12:33//
== Initial Installer ==
This component is similar to the current WinLibre. The user has to download and install it on its own accord. The initial installer should contain only the control center and the updater. Once the control center + updater are installed the control center will launch the updater and the user will be able to download and install the latest and greatest. This way there is no need to manage different versions of the initial installer. There should be minimal GUI (basically just a progress bar) and no user interaction.
* This corresponds to my notion of [[python_rewrite_bohdan#manatee_installer|Manatee/Installer]]. --- //bodq 2005/06/30 12:35//
== Updater ==
This component will check for updates and allow the user to download and install/upgrade new packages and also uninstall old packages. I think this component should not have a separate GUI and it should provide API that will be utilized by the Control Center. It should also runs constantly in the background and periodically check for updates and notify the control center. The updater should be a module of the control center and not stand alone component (although during development and testing it may have a stand alone front end)
== Control Center ==
This component should be the GUI front end of the entire WinLibre suite. The updater should be one of its modules. It should be always resident (although hidden most of the time) to be ready to receive update notifications from the updater. Of course the user may shut it down, but then it will lose auto update capability.
* I like the idea of the resident Control Center which incorporates other services (like updater, RSS feed checker, wikipedia, etc.) --- //bodq 2005/06/30 12:35//
== Other services ==
May be added relatively independently and laubched bt the control center.
=== Installation of Foreign Software in a Foreign OS ===
== Foreign Software ==
This is an important characteristic of WinLibre. The packages are not under WinLibre's control. This means that conflicts may arise. For example, consider the following scenario - Package A-1.0 and B-1.0 depend on package D-1.0. Package B releases a new version B-1.1 that depend on package D-2.0 (incompatible with D-1.0). Unfortunately, D-1.0 and D-2.0 can't reside side by side on the user's machine. We have an unresolvable conflict. Pierre-Jean mentioned to me in private email that he wants to cooperate with all the specific package creators. This is a good idea, and it can definitely solve many problems, but we should be ready or at least aware of unresovable conflicts (e.g. there is currently a dependency on Java).
== Foreign OS ==
By foreign OS I mean that at there is already an an existing mechanism for installation/uninstallation of software that we piggyback. Users may [inadvertantly] install/uninstall software on their machine through the standard mechanism and disrupt the normal operation of WinLibre. For example a user may try to make some room on his machine and uninstall the Java Runtime, which some WinLibre packages depend on. I think we should be able to detect and hopefully recover from things like missing dependencies or wrong versions. I am not sure if we should even try to manage a separate inventory of installed WinLibre software or rely on the OS directly.
=== Internationalization ===
This is an important feature to maintain. Basic internationalization of european locales can be handled pretty easilly by externalizing the text on the GUI. Higher levels such as different layout for different cultures, eastern locales etc are more complicated
* I offer my help making Ukrainian and Russian translations for any WinLibre project. --- //bodq 2005/06/30 12:35//
=== Data Storage and Exchange ===
== XML or not XML? ==
Everybody talks about XML, but we can also go with some other format. The current format of Winlibre is the INI file-like format. I don't think we should stick with it. The data is definitely hierarchical. But we there are other alternatives. For example [[http://www.yaml.org/|Yaml]] is exteremely Python-like and less verbose than XML. There are good Python bindings and libraries for reading/writing Yaml.
XML has good tool and library support and also allow some level of auto-verification via XML schema (or DTD etc).
My take on it is that while Yaml is technically superior it doesn't worth the mental effort of switching from the familiar and cozy XML.
I don't think we need to define a schema. In my experience a schema can't really help in validating the correctness of the XML (e.g. well-formed URLs for download) and it just divides the validation logic into two places. I prefer to validate the entire XML in the code by parsing it, noting missing elements/attributes and verfying the contents (ranges, types etc)
* I vote for XML. And I vote for DTD. And I vote for validation, should there be any maintainer-targeted tools. --- //bodq 2005/06/30 12:47//
== Single File or Multiple Files? ==
This is really a question if we should manage a local database of WinLibre installed software or rely on the OS. We definitly need a file (with interntiopnalized versions) for the update info. I lean towards having a single file and relying on the OS, since as I mentioned earlier we must monitor the OS installed software anyway.
* I have some ideas about this [[python_rewrite_bohdan#concepts|in my 'Concepts' section]]. --- //bodq 12:47//
== Proposal for XML format for the update information ==
This is an "XMLization" of the WinLibre_en.ini file + download information. Interesting things about it:
* Possibly multiple files per package (OpenOffice + dictionary)
* Multiple download locations per file (not even per package)
* Packages are grouped in categories
* Custom install procedure is enabled by downloading a special setup.py script
* Dependencies are grouped under a shared element and are referenced by packages that depend on them.
Java 1.4.2 Runtime Environment
GTK Library for windows
Complete, Microsoft Office compatible, sofware suite.
Writer, Calc, Impress, Draw
* I think, we don't need to separate updater, installer and control center data formats. At least, I won't do that for my project. --- //bodq 2005/06/30 13:01//
==== Additional Observations (By Joey Freund) ====
== Initial Installer ==
The initial installer should check to see if the user has Python installed, and if not it should download and install it, otherwise the Control Center and updater (assuming it will be written in Python) will not work.
== The solution is: Py2exe (By Bertrand Cachet) ==
No there is no need to install Python. There exist a program called py2exe which allow you to build an executable from your python source code.
I think it is a better way to work. I don't think end user will be very happy to install python an unknown program for him in order to install WinLibre distribution with which he wants to install other softwares.
[Gil] I think you are both right: py2exe sounds good for the initial installer. But as Joey said the initial installer should still install Python (if not installed already) so the control center, updater and future Python-based modules can be pure Python. py2exe puts the entire python runtime + win32 extensions in the executable and it's around 1MB if I'm not mistaken.
==== Additional Observations (By Bertrand Cachet) ====
== Initial Installer ==
If I understand what you have written, the WinLibre Python Prototype (which is the installer) just install the updater and the control center. Next everything is going to be done by the updater called by the control center when needed. So I have nearly finished my project :)
I think you are right to handle the install/update process with the "updater" project. But that means that my installer is going to only handle the installation of the control center and updater: what do you think about that Mr Coudert ? Does it correpond to your needs ?
==== Complete import of WinLibre_en.ini file (0.4 version)(By Gil Tal) ====
I wrote a small Python script to parse the distribution .ini file and spit out my XML format. It's huge so you probably don't want to do it manually. You can probably use XSLT to convert my XML format to your XML format. Note that many download links are broken. I also had to escape the ampersand character in some of the URLs (firefox). If PJ will publish a fixed one I'll rerun my script and update this page.
Java 1.4.2 Environnement
GTK Library for windows.
Complete, Microsoft Office compatible, sofware suite.
Writer, Calc, Impress, Draw
Virtual Printer to create PDF files.
Is an Adobe Acrobat Writer alternative.
Mind mapping software.
Write down, organize, communicate your ideas.
Ganttproject lets you plan projects
using a Gantt chart.
Mozilla project's web browser
Mozilla project's email client
Wysiwyg Web site editor.
FrontPage and DreamWeaver alternative
A quality FTP client
An instant messaging application
AOL, ICQ, Yahoo, MSN compatible
Audio editing software
Vector drawing application
native SVG format support.
3D modeler and renderer.
2D drawing software
The Photoshop alternative!
An archive of clip art that can be used
for free for any use.
Formats : SVG (vector) and PNG (bitmap).
A complete multimedia player
DivX,Mpeg2, ...
MP3/Ogg music player
MP3/Ogg audio encoder.
Audio CD ripper.
MP3Gain automatically adjusts mp3s
so that they all have the same volume.
Internet time synchronisation.
Computer Remote control.
Zip / Unzip software (ZIP, RAR, ...)
The WinZip, WinRar alternative
Antivirus software.
Tiny text editor
A great Windows Notepad replacement.