• Challenges packaging Python for a Linux distro - at Python Language Sum

    From Stefano Rivera@21:1/5 to All on Wed May 12 23:30:01 2021
    Matthias Klose gave a presentation at the Python Language Summit on the Challenges packaging Python for a Linux distro.

    There's a follow-on open space for working through some of these
    questions, on Saturday: https://us.pycon.org/2021/events/open-spaces/#openspace-42
    2021-05-15 18:15 UTC in Lounge 2

    Matthias covered:
    * No python on Debian systems by default.
    * Python2 removal coming soon, just hanging around for PyPy at this point.
    * One 3.x version at a time. Doesn't line up with cpython's support terms.
    * Python is split into multiple binary packages, for dependency (and
    historically licensing) reasons.
    * DFSG
    * autopkgtests, and automatic testing of reverse-dependencies
    * The existence of the "deadsnakes" PPA for Ubuntu, for people who want
    non-standard Python versions.
    * Applications generally are installed outside the default sys.path.
    * Modules are shipped installed with --single-version-externally-managed.
    * The site-packages => dist-packages rename.
    * PEP 3149 sharing a single /usr/share/python3/ across versions and
    implementations.
    * Pip isn't used in our packages (except in rare cases).
    * A historic look through license issues in the cpython sources, in the
    past.
    * The ensurepip module depends on wheels that are shipped without source.
    * pip and distro package managers get in conflict, esp. with
    sudo pip install.
    * Arch inclusively. Debian includes some weird architectures, some of
    which aren't widely used.
    * Communication issues between the Core Python developers + PyPA and
    Debian/Ubuntu recently.

    There was a strong Q&A section. I didn't take notes for this. Off the
    top of my head:
    * What do we provide for scientific / data scientist use cases?
    * Are there technical issues with using python3.x where x != default?
    * Are we aware of the problems on Debian?
    * Who decides what is/isn't packaged?
    * Have we considered a separate "system-python" that lives off PATH, and
    is used by Debian packaged applications. Then developers can get their
    own pristine python?
    * Who is still suggesting sudo pip install? pip upstream would be happy
    to help hunt down any references like that.

    SR

    --
    Stefano Rivera
    http://tumbleweed.org.za/
    +1 415 683 3272

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Goirand@21:1/5 to Stefano Rivera on Thu May 13 01:10:01 2021
    On 5/12/21 11:21 PM, Stefano Rivera wrote:
    Matthias Klose gave a presentation at the Python Language Summit on the Challenges packaging Python for a Linux distro.
    [..]
    This looks great. Is there a video of it somewhere?

    Cheers,

    Thomas Goirand (zigo)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefano Rivera@21:1/5 to All on Thu May 13 01:30:01 2021
    Hi Thomas (2021.05.12_23:06:45_+0000)
    On 5/12/21 11:21 PM, Stefano Rivera wrote:
    Matthias Klose gave a presentation at the Python Language Summit on the Challenges packaging Python for a Linux distro.
    [..]
    This looks great. Is there a video of it somewhere?

    No, there won't be videos published, only blog posts written.

    SR

    --
    Stefano Rivera
    http://tumbleweed.org.za/
    +1 415 683 3272

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Yaroslav Halchenko@21:1/5 to All on Thu May 13 15:50:01 2021
    FWIW, if might come handy in the future, my 4c:

    * What do we provide for scientific / data scientist use cases?

    - https://snapshot.debian.org/ is the unique service allowing to "go
    back in time" or just "freeze" the environment given a date.

    Very handy for reproducibility, collab, etc.

    Not possible AFAIK on pypi or even conda unless researcher prepared a
    full exhaustive list of frozen package==version@build

    nd_freeze from neurodebian-freeze assists in making use of that
    feature. I just stick it at the top of my Dockerfile/Singularity file
    recipes to make container itself as reproducible as possible, so later
    on I could add another component less likely affecting already
    existing ones.

    - wider arch support for extensions and non-python libraries/tools.
    ppc64el is gaining some momentum AFAIK in sci computing

    - better guarantees to achieve desired installation goal.

    examples of pip/conda failing to resolve depends are more numerous
    AFAIK.

    - integration and downstream testing at package build time and via
    https://ci.debian.net/

    anyone who cares to not only "get it running" but have some assurance
    of correct operation (not junk-in-junk-out) should appreciate that.

    pypi has no concerns on that at all. conda is doing quite good job
    and does allow for some downstream testing. But it remains "more
    fluid", unlike a clear cut releases of debian with better guarantees
    for correct operation


    --
    Yaroslav O. Halchenko
    Center for Open Neuroscience http://centerforopenneuroscience.org
    Dartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755
    WWW: http://www.linkedin.com/in/yarik

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Goirand@21:1/5 to Stefano Rivera on Thu May 13 22:50:02 2021
    On 5/13/21 1:26 AM, Stefano Rivera wrote:
    Hi Thomas (2021.05.12_23:06:45_+0000)
    On 5/12/21 11:21 PM, Stefano Rivera wrote:
    Matthias Klose gave a presentation at the Python Language Summit on the
    Challenges packaging Python for a Linux distro.
    [..]
    This looks great. Is there a video of it somewhere?

    No, there won't be videos published, only blog posts written.

    SR

    Matthias, if you read this: you *MUST* make such a presentation at the
    next debconf, *PLEASE* !!!

    Cheers,

    Thomas Goirand (zigo)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Luke Kenneth Casson Leighton@21:1/5 to All on Sun May 16 14:20:01 2021
    * One 3.x version at a time. Doesn't line up with cpython's support terms.

    folks, deep breath here: this is much more important than the one line
    summary suggests.

    for some background: i have been using debian since 1996 and python for
    20+ years, dating back to python 2.0.

    due to the massive amount of accumulated software (several million
    development source code files) i run a rolling debian/testing system,
    *never* do an "apt-get dist-upgrade", *always* simply perform an on-demand install of a given package and let apt sort itself out even to the
    point often of
    having some innocuous package end up pulling in a new libc6-dev and
    binutils.

    generally this works extremely well: in 20 years the only really serious problems occur are, yes, you guessed it: python related.

    correction: the situation around python 2.2, 2.3 to 2.5 was perfectly fine,
    i will touch on this again below.

    now, i do hesitate to mention this, but what i am about to tell you, *multiple* people including debian python package maintainers, have, over the years, raised it *multiple* times on *multiple* separate occasions, and each and
    every time they have been ignored and the bugreport shut down without
    due consideration.

    if you recall the situation with a version of ubuntu where they created two versions of ubuntu where python 2.5 was the *only* version supported in
    one, and python 2.6 was the *only* version of python available in the next, anyone who performed an "apt-get dist-upgrade" had python REMOVED
    from their running system, and, given that apt itself was critically dependent on python at the time, people ended up with a permanently unuseable
    system.

    debian's python packaging is rushing ahead so fast at the moment that it
    is in danger of running into something similar.

    the key issue is that python-dev is an exclusive "narrow window" that, on
    each upgrade, moves to one *AND ONLY ONE* version of python.
    python3.6-dev, python3.7-dev, python3.8-dev, and now python3.9-dev.

    this is not a problem for the majority of packages that are pure python.
    it is however a REALLY SERIOUS problem for c-based modules, and
    for python-boost applications it is absolute hell on earth (boost is
    a long-term known thorn in the side of developers, and the python bindings
    add a layer of extra special hell on top of that)

    let's go through a scenario, going back in time somewhat

    * developer (me) uses debian/testing which, nominally, is by now
    mostly debian 9 packages, including (mostly) python 3.6
    * debian / testing flips python-dev to python3.7-dev and builds
    begin
    * ALL PACKAGES WHICH DEPEND ON 3.6 NOW BREAK

    due to the hard-coded numbering, *ANY* package containing
    c-based modules has debian packaging which now says
    "this package now EXCLUSIVELY depends on python3.7.so"

    in that package, which is **NOT** numbered python3.7-{packagename},
    it is named **PYTHON**-{packagename}, there is **ONLY**
    a python3.7.so: the dependency on python3.6.so has been
    **REMOVED**

    that package, small as it is, ends up with a dependency cascade
    that can result in literally HUNDREDS os packages being removed
    and/or force-upgraded unnecessarily.

    thus, i end up in a really serious situation, just like with ubuntu about
    10 years ago, where the only option is to literally remove everything.
    given that i am trying to do some development work on which i rely
    for income, that is simply not an option to remove critical packages.

    now, where it gets particularly bad is during the cross-over point
    where some of the packages have not been re-built yet, and some
    have. this happened very recently with the 3.7 to 3.8 cross-over:
    an innocuous and simple package had a dependency cascade
    where half the required packages - all of which were c-based -
    had not even been built yet.

    numpy and sci-py, the two "best known" debian python software
    packages, have known about this for a long, long, time. they
    quietly solved it by adding explicit building of **MULTIPLE**
    versions of numpy-3.5, numpy-3.6, numpy-3.7, etc. etc.

    this "rolling release" system basically solves absolutely everything,
    and causes no problems whatsoever of any kind.

    if i may repeat that again so as to emphasise the deep significance:
    numpy and sci-py have *absolutely no problems whatsoever* when
    it comes to these critical long-term rolling upgrades.

    i cannot emphasise enough how serious this really is. it is
    asking for trouble, and, more than that, has been reported multiple
    times and been ignored each and every time.

    unfortunately, very recently, it gets even worse.

    i was extremely dismayed and alarmed, recently, to learn, on trying
    to install a package, that there has been no "stabilisation time"
    allowed, and that the latest version of debian/testing has *already*
    moved on to python 3.9.

    now, if the latest version of debian/testing had stayed with python 3.8,
    there would be no problem. debian/testing would stabilise and become debian/11, and there would be some peace at least for a while.

    it gets worse.

    one of our developers, who has never used python before, has reported
    that with the python astor package, there's a serious problem:

    File "<frozen importlib._bootstrap>", line 627, in _load_backward_compatible
    File "<frozen zipimport>", line 259, in load_module
    File "/opt/python39/lib/python3.9/site-packages/astor-0.8.1-py3.9.egg/astor/__init__.py",
    line 24, in <module>
    NotADirectoryError: [Errno 20] Not a directory: '/opt/python39/lib/python3.9/site-packages/astor-0.8.1-py3.9.egg/astor/VERSION'

    astor/VERSION is a file, not a directory. this error should not in the
    least bit be happening.

    here's where the mistake of the narrow focus really hits home: you're
    half way through an upgrade of rebuilding the entirety of python 3.9,
    and it turns out that there's a serious problem with either the setuptools
    or with python 3.9 itself.

    you can't now "back out" of python 3.9 in debian/testing - it's far
    too late for that.
    you're now - whilst in the middle of a major upgrade / rebuild -
    critically dependent
    on scrambling to fix something in a moving target (python 3.9).

    if there was a policy in place which followed EXACTLY what numpy and
    sci-py already do - build c-based packages that remain STABLE - there would
    be no problem whatsoever.

    the lesson from ubuntu's mistake, 10+ years ago, seems not to have been learned.

    to fix this, there needs to be a stable overlap where multiple compiled versions
    are installed and maintained. to fix the problem, the rule needs to be set:

    * any given version of python *MUST* cross over from one debian/stable
    to another debian/stable.
    * only when a given version of python has been in TWO versions of
    debian/stable may it be considered for retirement / removal

    yes, this does mean that if there are two major releases of python within
    a debian stable-to-stable release, you end up with *FOUR* versions of
    python built and supported. this is just how it is - it's exactly how it
    is with numpy and sci-py, which is doing things correctly.

    python itself seems to be on an accelerated path at the moment (this
    is not a good thing), and it's up to you - the distro - to put in place policies that provide stable, reliable, long-term packaging.

    right now, things are not in the least bit stable (not referring to debian/stable,
    just stability "in general"). no, it is not an option for our team to use debian/stable itself, because we have a mixture of software packages that
    are not even in debian, and have to be installed from git repositories.

    i leave you with these insights. there *is* a solution: do what numpy and sci-py do.

    any questions please feel free to ask.

    best,

    l.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Luke Kenneth Casson Leighton@21:1/5 to lkcl@lkcl.net on Sun May 16 14:30:01 2021
    On Sun, May 16, 2021 at 12:52 PM Luke Kenneth Casson Leighton
    <lkcl@lkcl.net> wrote:

    to fix this, there needs to be a stable overlap where multiple compiled versions
    are installed and maintained. to fix the problem, the rule needs to be set:

    * any given version of python *MUST* cross over from one debian/stable
    to another debian/stable.
    * only when a given version of python has been in TWO versions of
    debian/stable may it be considered for retirement / removal

    sorry, correction / clarification:

    any given version of python *and all python packages* must cross over
    from and be permanently and irrevocably available across two versions
    of debian/stable.

    this will sove in one fell swoop all of the issues that have been reported multiple times by multiple people for many years, creating a long-term
    reliable and stable distribution.

    you will be able to *SAFELY* do what you just did - back out of
    python 3.8 and deploy 3.9 - *WITHOUT* completely destroying
    people's systems because 3.7 was force-removed and they were
    given absolutely no choice in the matter.

    btw please, please, i am anticipating responses of the type
    "it's your problem, you shouldn't be using debian/testing, if
    you do you get everything you deserve". if that thought crossed
    your mind, please reconsider, and ask instead "why is this
    person using debian/testing for 20 years".

    l.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Goirand@21:1/5 to Luke Kenneth Casson Leighton on Sun May 16 23:00:02 2021
    On 5/16/21 1:52 PM, Luke Kenneth Casson Leighton wrote:
    * One 3.x version at a time. Doesn't line up with cpython's support terms.

    folks, deep breath here: this is much more important than the one line summary suggests.

    for some background: i have been using debian since 1996 and python for
    20+ years, dating back to python 2.0.

    due to the massive amount of accumulated software (several million development source code files) i run a rolling debian/testing system,
    *never* do an "apt-get dist-upgrade", *always* simply perform an on-demand install of a given package and let apt sort itself out even to the
    point often of
    having some innocuous package end up pulling in a new libc6-dev and
    binutils.

    All the horrors that you are painting after this paragraph, are due to
    the fact that you aren't doing "apt-get dist-upgrade". I'm having a hard
    time understanding why you're both:
    - not doing "apt-get dist-upgrade"
    - complaining that it's breaking your system

    Could you care to explain? This makes absolutely no sense.

    By the way, since you're never doing "apt-get dist-upgrade", it means
    your system is full of security issues that aren't getting fixed.
    Hopefully, the computer system(s) you're talking about isn't connected
    to internet, right?

    Cheers,

    Thomas Goirand (zigo)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Brian May@21:1/5 to Thomas Goirand on Mon May 17 00:30:02 2021
    Thomas Goirand <zigo@debian.org> writes:

    All the horrors that you are painting after this paragraph, are due to
    the fact that you aren't doing "apt-get dist-upgrade". I'm having a hard
    time understanding why you're both:
    - not doing "apt-get dist-upgrade"
    - complaining that it's breaking your system

    Could you care to explain? This makes absolutely no sense.

    A rolling type update might be convenient, but it is not supported by
    Debian, and has not been supported by Debian in sometime. There are complexities in such an arrangement, and it is difficult to test such arrangements will work as expected. Such an arrangement is not
    guaranteed or tested to work.

    In short, if you want to upgrade to Debian version n, you really should
    be running entirely Debian n-1 before you start the upgrade. This is
    important. And you probably should upgrade everything in one go. As this
    is the only tested upgrade procedure.
    --
    Brian May <bam@debian.org>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Matthias Klose@21:1/5 to Luke Kenneth Casson Leighton on Mon May 17 12:10:02 2021
    On 5/16/21 1:52 PM, Luke Kenneth Casson Leighton wrote:
    * One 3.x version at a time. Doesn't line up with cpython's support terms.

    numpy and sci-py, the two "best known" debian python software
    packages, have known about this for a long, long, time. they
    quietly solved it by adding explicit building of **MULTIPLE**
    versions of numpy-3.5, numpy-3.6, numpy-3.7, etc. etc.

    i leave you with these insights. there *is* a solution: do what numpy and sci-py do.

    I don't understand why you are pointing to numpy and scipy as good examples. The modules are not built in any different way from all the modules shipped in Debian.

    Matthias

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Goirand@21:1/5 to Luke Kenneth Casson Leighton on Mon May 17 16:20:01 2021
    Hi Luke,

    First, I'd like you to know I feel sorry to read how much you seem
    affected by what you describe below. Hopefully, you'll find a viable
    solution soon, and hopefully, we may help.

    However, please try to understand what others are telling. The solution
    you're looking for is probably not the one you expect, but I'm convince
    it does exist (ie: venv, probably, or better dependency management). See
    below.

    On 5/17/21 8:10 AM, Luke Kenneth Casson Leighton wrote:
    All the horrors that you are painting after this paragraph, are due to
    the fact that you aren't doing "apt-get dist-upgrade". I'm having a hard
    time understanding why you're both:
    - not doing "apt-get dist-upgrade"

    because precisely the difficulties encountered, and due to software development
    that critically requires more recent variants of what is typically in debian/stable
    i.e. usually a minimum of one even three years out-of-date.

    a dist-upgrade to debian / testing - a way to obtain the latest
    variants of critical
    software - frequently resulted in massive breakage.

    Massive breakage of what? Your own Python code? Well, it's up to you to
    stay current to whatever version is in Testing/Unstable. If you don't do
    it, then it's your responsibility, and you must live with the
    consequences of it.

    Yes, it's a massive undertaking to always stay up-to-date, and drains a
    lot of energy, though no choice if you're serious with what you're doing...

    i quickly learned never to attempt that again given the massive disruption
    it caused to me being able to earn money as a software engineer.

    So, to "earn money as a software engineer", you prefer your software to
    rely on older, probably buggy, and not security supported, dependencies?
    I'm sorry, but that's far from best practice, and it will bite hard anyways.

    Yes, dependency management is a hard work. Yes, it takes some of your
    time (sometimes massively). No, you can't avoid it...

    - complaining that it's breaking your system

    ah, you're missing the point by focussing on the background and context.

    Are you *SURE* that you're the only person that's right, and that the
    dozen experienced Debian Developers saying the opposite way are the
    wrong persons? I would strongly advise you to reconsider.

    Do you completely understand how "library transitions" are working in
    Debian? If not, I would strongly advise you to read about it.

    i would prefer to solicit some
    responses that acknowledge that this is an actual problem that needs
    solving.

    Well, it feels like the only thing you accept, is the answer that *YOU*
    want, and not the one that others are telling you. Chances that it's
    going to happen are very thin, since we all know that what you're
    discussing is not the way Debian works.

    Bryan's message unfortunately is a repeat of prior experiences
    in reporting this issue over the years.

    Looks like a lot of people told you the same thing...
    Do you sometimes listen to what others tell? :)

    Brian May wrote:
    A rolling type update might be convenient, but it is not supported by
    Debian, and has not been supported by Debian in sometime. There are
    complexities in such an arrangement, and it is difficult to test such
    arrangements will work as expected. Such an arrangement is not
    guaranteed or tested to work.

    Brian: as an experienced debian systems administrator and python
    developer I'm not asking for help with either, and over the past 20 years have successfully learned and deployed the techniques required to
    keep a rolling system operational

    Apparently, you haven't...

    like Thomas, you are missing the point by focussing on the context
    and background material rather than focussing on the problem.

    We aren't at all missing the point that doing the way you're doing is
    often breaking your system.

    The problem: you're expecting that never doing "apt-get dist-upgrade"
    will handle library transitions, when this isn't the way Debian works.

    We're all telling you, but you do not want to listen, and insist that
    what you've been doing (wrongly) for 20 years is the correct way of
    doing things. Sorry, but it's not... You *will* experience breakage, and there's nothing we can do to save you.

    this was also the tack taken by others when i explained the problem:
    "it's your own fault, this isn't supported, therefore we don't have to
    do anything, therefore it's not a bug, therefore the bugreport is
    summarily dismissed".

    Which is 100% correct.

    in my report, if you read it again carefully, i specifically stated that *multiple debian maintainers* are receiving *multiple complaints* of
    breakage and disruption due to the standard debhelper-python
    build system not following the "safe" practice outlined by
    numpy and sci-py.

    The problem isn't the build system, which is doing things the correct
    way. Any "arch: any" package linked against Python *must* be upgraded
    together with the interpreter itself when it transition from Unstable to Testing. That's a fact, and how Debian is designed.

    By *policy* Debian doesn't support multiple versions of a library on a
    single system. The only thing that is allowed, is to have 2 versions
    *during a transition*. What we hope is to have such thing happen (ie: 2 versions of a single library) only in Unstable, though sometimes, this
    also migrates to testing, but that's not what we desire.

    If you wish Debian to support multiple versions of a library, you should
    first attempt to discuss this feature at large with the Debian community because *by design* (and therefore, written in the stones of the Debian
    Policy Manual) that isn't how we want Debian to work, and how the Debian community wants it to work.

    If you wish to have such a feature, then yeah, probably you should go
    and use another distribution, because I don't see Debian changing on the direction you describe anytime soon.

    i can only surmise that they probably don't want to say anything
    because the message being sent to them on summary closure
    of bugreports is that, well, "nobody cares".

    I don't think that's right. They just think you are wrong, because you
    believe Debian should support multiple versions of a library (here:
    Python), when it's not the case *by design*, because we (ie: everyone contributing to Debian) want Debian to be this way. This isn't specific
    to the Python world, this is how Debian *at large* is designed.

    once this is accepted as actually being a problem that needs solving,
    rather than being avoided because "it's not supported, you're on your
    own, not our problem", i am happy to help advise and discuss
    solutions.

    given that this has been ongoing for 10 years now i have been giving
    it some thought for a long, long time.

    however before getting to a discussion of solutions i would prefer
    to see acknowledgement that it is recognised as a problem that
    people actively wish to see fixed.

    As I wrote earlier, before discussing if this is a problem or not, you
    will need to convince a majority of Debian Developers that having 2
    versions of a shared library at the same time on a given Debian system
    is something we desire. Good luck doing that, as this is a very strong
    feature of Debian. I don't know any Debian Developer that believes this
    is something desirable.

    otherwise i will have to wait patiently
    for the next disaster situation to occur, or, sadly, after 20 years of
    using debian, and remaining loyal to it despite maltreatment, i will
    have to find an alternative distro.

    There's no maltreatment. Just a misunderstanding from your side of what
    Debian does, IMO.

    Finding another distro may be one solution indeed.

    Doing what Jeremy suggests (ie: running your builds in a chroot, or with
    venv, etc.) may work for some times, though I would strongly recommend
    the best practices in terms of dependency management, which means:
    always try to stay current with all of your dependencies.

    what is stopping me from doing that is the severe financial consequences involved and risk to myself and my family due to my income being
    far below average. the downtime that would result is a huge risk,
    plus learning a new distro also compromises my effectiveness which
    also results in further lost income.

    Then learn how to reproducibly build chroot and venvs.

    what i am saying is: this is serious - i am effectlvely financially
    trapped and critically dependent on the decisions that you make,
    even though i am not paying you money for the work that you do.

    IMO, you've trapped yourself here... but there's exist strategies. :)
    I sincerely hope you will find a solution that matches your need,
    hopefully by continuing to use Debian.

    Cheers,

    Thomas Goirand (zigo)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefano Rivera@21:1/5 to All on Mon May 24 16:40:01 2021
    Hi Thomas (2021.05.12_23:06:45_+0000)
    This looks great. Is there a video of it somewhere?

    The official blog post on it has been published:

    https://pyfound.blogspot.com/2021/05/the-2021-python-language-summit_23.html

    SR

    --
    Stefano Rivera
    http://tumbleweed.org.za/
    +1 415 683 3272

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)