Switching default python to Python 3

classic Classic list List threaded Threaded
57 messages Options
123
Reply | Threaded
Open this post in threaded view
|

Switching default python to Python 3

jan matejek-4
Fellow openSUSists,

this has been a long time coming, and I'd now like to start the actual process of switching the
default Python implementation to Python 3 in Tumbleweed.

First of all, big thanks to everyone who is converting (or has converted) their packages to
singlespec. That alone makes the Python 3 switch much easier than it would be otherwise.

Then, details.

When:
* in the coming weeks. I'd like to do some tests and gather feedback before actually moving forward.
  A heads-up e-mail will come before anything is actually headed to TW.

Why:
* Python 2 is very near its end of life [1], the vast majority of our stuff already works
  in python3. We want to have python3 as default in SLE 15, so now's a very good time to start.

What will happen:
* `python` package will be renamed to `python2` and will obsolete/provide `python <= 2.7.13`
* `python3` already provides `python = 3.6` and will also obsolete `python < %version`
  This should mean that if you don't require python2 on your system, it will be uninstalled,
  otherwise it will be replaced by python2.
* /usr/bin/python will be switched to point to /usr/bin/python3. Other unversioned python binaries
  will also be switched.
* python packages in patterns will be replaced by the corresponding python3 ones

What else will happen:
* Stuff will break! The breakage will be contained to a testing project at first.
* python packages that are not yet converted to singlespec will switch over to python3.
  Some of them will magically continue working, others will break.
* For those we will also start getting file conflicts with python3 versions.
  A good opportunity to revisit and either completely drop the python2 version, convert
  to singlespec, or to explicitly-python2 package.
* python packages that _are_ converted to singlespec will work just fine
* as will explicitly-python3 packages from d:l:py3
* packages that _require_ python stuff will also magically get python3. They might
  very well also break
* through this, we will learn where we still depend on Python 2, and hopefully fix it
* note that if a script is using "/usr/bin/python" as shebang (or worse, "/usr/bin/env python"),
  it's already wrong. The shebang must be versioned, unless the script actually works
  with an arbitrary python version

regards
m.

[1] https://pythonclock.org/


signature.asc (849 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Aleksa Sarai
> this has been a long time coming, and I'd now like to start the actual process of switching the
> default Python implementation to Python 3 in Tumbleweed.

Awesome work, super excited about finally having Python 3 as the default!

> What will happen:
> * python packages in patterns will be replaced by the corresponding python3 one
> * python packages that are not yet converted to singlespec will switch over to python3.
>    Some of them will magically continue working, others will break
Is there a plan for python-* packages and how they are going to relate
to the python3-* set of packages? By which I mean, if I want to install
python-numpy will that install the py3 or py2 version? Or is that all
handled by singlespec?

As an aside, when is the plan to merge the two wiki pages[1,2] for
Python packaging? I ask because I remember trying to package Python a
while ago and I don't remember the tiny mention of single-spec in the
main page.

> * note that if a script is using "/usr/bin/python" as shebang (or worse, "/usr/bin/env python"),
>    it's already wrong. The shebang must be versioned, unless the script actually works
>    with an arbitrary python version

Quick question, is "#!/usr/bin/python3" better or worse than
"#!/usr/bin/env python3"? I've always used the latter in my own projects
because it avoids weird distros breaking scripts.

[1]: https://en.opensuse.org/openSUSE:Packaging_Python
[2]: https://en.opensuse.org/openSUSE:Packaging_Python_Singlespec

--
Aleksa Sarai
Software Engineer (Containers)
SUSE Linux GmbH
https://www.cyphar.com/
--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Aleksa Sarai
In reply to this post by jan matejek-4
> this has been a long time coming, and I'd now like to start the actual process of switching the
> default Python implementation to Python 3 in Tumbleweed.

Awesome work, super excited about finally having Python 3 as the default!

> What will happen:
> * python packages in patterns will be replaced by the corresponding python3 one
> * python packages that are not yet converted to singlespec will switch over to python3.
>    Some of them will magically continue working, others will break
Is there a plan for python-* packages and how they are going to relate
to the python3-* set of packages? By which I mean, if I want to install
python-numpy will that install the py3 or py2 version? Or is that all
handled by singlespec?

As an aside, when is the plan to merge the two wiki pages[1,2] for
Python packaging? I ask because I remember trying to package a Python
library a while ago and I don't remember the tiny mention of single-spec
in the main page.

> * note that if a script is using "/usr/bin/python" as shebang (or worse, "/usr/bin/env python"),
>    it's already wrong. The shebang must be versioned, unless the script actually works
>    with an arbitrary python version

Quick question, is "#!/usr/bin/python3" better or worse than
"#!/usr/bin/env python3"? I've always used the latter in my own projects
because it avoids weird distros breaking scripts.

[1]: https://en.opensuse.org/openSUSE:Packaging_Python
[2]: https://en.opensuse.org/openSUSE:Packaging_Python_Singlespec

--
Aleksa Sarai
Software Engineer (Containers)
SUSE Linux GmbH
https://www.cyphar.com/
--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

jan matejek-5
In reply to this post by Aleksa Sarai
On 26.6.2017 15:44, Aleksa Sarai wrote:
> Is there a plan for python-* packages and how they are going to relate to the python3-* set of
> packages? By which I mean, if I want to install python-numpy will that install the py3 or py2
> version? Or is that all handled by singlespec?

singlespec generates python2-numpy and python3-numpy, so the version is explicit. Today you
shouldn't have "python-numpy" on your system.

As part of the switch, the "python-numpy" symbol will be provided by "python3-numpy" instead of python2.

If you now have "python2-numpy", nothing special will happen to replace that with "python3-numpy".
(at least no plan to do so at the moment)
But a package requiring "python-numpy" will pull in "python3-numpy" instead.

>
> As an aside, when is the plan to merge the two wiki pages[1,2] for Python packaging? I ask because I
> remember trying to package Python a while ago and I don't remember the tiny mention of single-spec
> in the main page.

there is a plan, yes :) but no roadmap. Basically when I have the time, or when someone else does it.

>
>> * note that if a script is using "/usr/bin/python" as shebang (or worse, "/usr/bin/env python"),
>>    it's already wrong. The shebang must be versioned, unless the script actually works
>>    with an arbitrary python version
>
> Quick question, is "#!/usr/bin/python3" better or worse than "#!/usr/bin/env python3"? I've always
> used the latter in my own projects because it avoids weird distros breaking scripts.

For a script that is part of Tumbleweed, the second is wrong and the first is correct.
This is because "/usr/bin/env" will find a python that a user has installed into their own path, and
that might be a strange unsupported version which breaks your app ;)

The latter is (only) useful if you're distributing the script between different distros.

>
> [1]: https://en.opensuse.org/openSUSE:Packaging_Python
> [2]: https://en.opensuse.org/openSUSE:Packaging_Python_Singlespec
>


signature.asc (849 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Christian Boltz-5
In reply to this post by jan matejek-4
Hello,

Am Montag, 26. Juni 2017, 15:26:12 CEST schrieb jan matejek:
...
> * /usr/bin/python will be switched to point to /usr/bin/python3. Other
> unversioned python binaries will also be switched.
...
> * Stuff will break! The breakage will be contained to a testing
> project at first.

I really like the switch to py3, but I don't like the "Stuff will break"
part ;-)

Especially switching the /usr/bin/python symlink to py3 sounds like it
will break *lots of* things because everybody expects it to point it to
py2.

> * note that if a script is using "/usr/bin/python" as shebang (or
> worse, "/usr/bin/env python"), it's already wrong. The shebang must be
> versioned, unless the script actually works with an arbitrary python
> version

Is there a way to check all packages for unversioned python shebangs?
(Install and grep them all, add a rpmlint check, whatever?)

After collecting this information, contact the package maintainers and
ask them to fix the shebang (ideally by putting py3 there ;-)

That would be much better (and less painful) than finding all the
breakage after doing the switch ;-)


Regards,

Christian Boltz
--
Microsoft is not the Answer -
Microsoft is the Question,
and the Answer is no !
--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

gregfreemyer
On Mon, Jun 26, 2017 at 2:38 PM, Christian Boltz <[hidden email]> wrote:
> Is there a way to check all packages for unversioned python shebangs?
> (Install and grep them all, add a rpmlint check, whatever?)
>
> After collecting this information, contact the package maintainers and
> ask them to fix the shebang (ideally by putting py3 there ;-)
>
> That would be much better (and less painful) than finding all the
> breakage after doing the switch ;-)

+1

Even if I wanted to be proactive I suspect I support 50 or more
packages with python involvement.  Some form of automated tool to make
sure all is well is pretty important.

Thanks
Greg

--
Greg Freemyer
Advances are made by answering questions. Discoveries are made by
questioning answers.
— Bernard Haisch
--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Rüdiger Meier
On 06/26/2017 10:01 PM, Greg Freemyer wrote:

> On Mon, Jun 26, 2017 at 2:38 PM, Christian Boltz <[hidden email]> wrote:
>> Is there a way to check all packages for unversioned python shebangs?
>> (Install and grep them all, add a rpmlint check, whatever?)
>>
>> After collecting this information, contact the package maintainers and
>> ask them to fix the shebang (ideally by putting py3 there ;-)
>>
>> That would be much better (and less painful) than finding all the
>> breakage after doing the switch ;-)
>
> +1
>
> Even if I wanted to be proactive I suspect I support 50 or more
> packages with python involvement.  Some form of automated tool to make
> sure all is well is pretty important.

Also, please think about the users. Users who use python3 already now are
using "python3" explicitly. Python2 users (I guess still majority in some
fields) may just use "python" and we will break them. So from the user's
view, renaming things will not improve anything but may break any user
script with non-versioned shebang.

FYI I have access to a very large SLE cluster. There are many users
running "python" jobs and they expect python2. Let them survive the
update!

cu,
Rudi
--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Stephan Kulow-3
Am 26.06.2017 um 22:34 schrieb Rüdiger Meier:
> FYI I have access to a very large SLE cluster. There are many users
> running "python" jobs and they expect python2. Let them survive the
> update!
>
Oh! Of course Rüdiger! We really need to have your users survive, we
shouldn't do anything that kills them or even endangers their lives.
We definitely are in agreement here! This is a RED LINE!

But FYI: this is just a switch in python defaults for Tumbleweed, no one
will be hurt.

Greetings, Stephan

--
Ma muaß weiterkämpfen, kämpfen bis zum Umfalln, a wenn die
ganze Welt an Arsch offen hat, oder grad deswegn.
--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Dominique Leuenberger / DimStar
In reply to this post by jan matejek-4
On Mon, 2017-06-26 at 15:26 +0200, jan matejek wrote:
> Fellow openSUSists,
>
> this has been a long time coming, and I'd now like to start the
> actual process of switching the
> default Python implementation to Python 3 in Tumbleweed.

I'd like to point to https://www.python.org/dev/peps/pep-0394/ again...

"""The main barrier to a distribution switching the python command from
python2 to python3 isn't breakage within the distribution, but instead
breakage of private third party scripts developed by sysadmins and
other users. Updating the python command to invoke python3 by default
indicates that a distribution is willing to break such scripts with
errors that are potentially quite confusing for users that aren't yet
familiar with the backwards incompatible changes in Python 3."""

is openSUSE *REALLY* the distro that is willing to break user scripts?

>
> What else will happen:
> * Stuff will break! The breakage will be contained to a testing
> project at first.

That will be an interesting project - and breakages will be many, I'm
sure

> * note that if a script is using "/usr/bin/python" as shebang (or
> worse, "/usr/bin/env python"),
>   it's already wrong. The shebang must be versioned, unless the
> script actually works
>   with an arbitrary python version

As this has so far not been any rule to enforce, I can ensure you a ton
of fallouts.


zypper se --requires -x /usr/bin/python => this lists 635 items (of
which 211 are source packages).

zypper se --requires -x /usr/bin/env => 747 hits; no analysis done what
those will run behind; could be anything (0 of them are source
packages)

Also, if those shebangs are so wrong we definitively need a way to
support our packagers to change it in the shipped .py files - without
having to go out and write 1000 patches for this now. The bare minimum
is a documentation with recommendations on how to easily find, then
change the files.

Followed with rpmlint warnings that can be searched for (once rpmlint
warns, the warnings will show up on rpmlint.opensuse.org)

Cheers,
Dominique

signature.asc (201 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Stephan Kulow-3
On 06/27/2017 09:32 AM, Dominique Leuenberger / DimStar wrote:

> On Mon, 2017-06-26 at 15:26 +0200, jan matejek wrote:
>> Fellow openSUSists,
>>
>> this has been a long time coming, and I'd now like to start the
>> actual process of switching the
>> default Python implementation to Python 3 in Tumbleweed.
>
> I'd like to point to https://www.python.org/dev/peps/pep-0394/ again...
>
> """The main barrier to a distribution switching the python command from
> python2 to python3 isn't breakage within the distribution, but instead
> breakage of private third party scripts developed by sysadmins and
> other users. Updating the python command to invoke python3 by default
> indicates that a distribution is willing to break such scripts with
> errors that are potentially quite confusing for users that aren't yet
> familiar with the backwards incompatible changes in Python 3."""
>
> is openSUSE *REALLY* the distro that is willing to break user scripts?
>

Can we make /usr/bin/python smart to know if it was started as part of a
shebang
and output a warning?

Greetings, Stephan

--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Fabian Wein
> Can we make /usr/bin/python smart to know if it was started as part of a
> shebang
> and output a warning?

What is to be preferred against shebang? For me python2 on TW does not
work any more for some time. h5py and vtk are appear to me to be not
supported any more. I modified our scripts to run with python3 and
python2 (for my colleagues, some on quite old distros with python3 not
installed).

So I cannot explicitly call pyhton2 or python3 in shebang, which makes
no sense as the scripts run on both.

The dirty fix for me is, to shebang #!/usr/bin/env python
and have my ~/bin/python link to /usr/bin/python3

So if you want to "enforce" the explicit selection of python2 and
python3 I vote against it.

BTW, vtk cannot exist concurrently for python2 and python3 AFAIK.

Fabian
--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Rüdiger Meier
In reply to this post by Stephan Kulow-3


On 06/27/2017 10:00 AM, Stephan Kulow wrote:

> On 06/27/2017 09:32 AM, Dominique Leuenberger / DimStar wrote:
>> On Mon, 2017-06-26 at 15:26 +0200, jan matejek wrote:
>>> Fellow openSUSists,
>>>
>>> this has been a long time coming, and I'd now like to start the
>>> actual process of switching the
>>> default Python implementation to Python 3 in Tumbleweed.
>>
>> I'd like to point to https://www.python.org/dev/peps/pep-0394/ again...
>>
>> """The main barrier to a distribution switching the python command from
>> python2 to python3 isn't breakage within the distribution, but instead
>> breakage of private third party scripts developed by sysadmins and
>> other users. Updating the python command to invoke python3 by default
>> indicates that a distribution is willing to break such scripts with
>> errors that are potentially quite confusing for users that aren't yet
>> familiar with the backwards incompatible changes in Python 3."""
>>
>> is openSUSE *REALLY* the distro that is willing to break user scripts?
>>
>
> Can we make /usr/bin/python smart to know if it was started as part of a
> shebang
> and output a warning?

Such a warning could be good.

But it doesn't matter whether it's a shebang or not. I know many
existing cron jobs or other job scripts which are shell scripts using
"python xyz.py". Also many tutorials and examples on the web are still
teaching python.

cu,
Rudi
--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Jiri Slaby-6
In reply to this post by jan matejek-4
On 06/26/2017, 03:26 PM, jan matejek wrote:
> * note that if a script is using "/usr/bin/python" as shebang (or worse, "/usr/bin/env python"),
>   it's already wrong. The shebang must be versioned, unless the script actually works
>   with an arbitrary python version

Ugh, this will be tough.

An average system:

# grep '#!.*python$' /usr/bin/*|wc
    107     182    4485
# grep '#!.*python[23]' /usr/bin/*|wc
     51      52    1936

You can start with fixing llvm which:
* has "#!/usr/bin/env python" and "Requires Python 2.7"
* thus makes the whole Xorg world depend on python 2

I don't think it makes any sense to do the switch now or in the near future.

thanks,
--
js
suse labs


signature.asc (871 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Michael Ströder
In reply to this post by Dominique Leuenberger / DimStar
Dominique Leuenberger / DimStar wrote:

> I'd like to point to https://www.python.org/dev/peps/pep-0394/ again...
>
> """The main barrier to a distribution switching the python command from
> python2 to python3 isn't breakage within the distribution, but instead
> breakage of private third party scripts developed by sysadmins and
> other users. Updating the python command to invoke python3 by default
> indicates that a distribution is willing to break such scripts with
> errors that are potentially quite confusing for users that aren't yet
> familiar with the backwards incompatible changes in Python 3."""
>
> is openSUSE *REALLY* the distro that is willing to break user scripts?
I'd vote against this breakage. Especially because it does not fix a real problem. And
surely nobody is willing to maintain thousands of shee-bang patches.

Ciao, Michael.


smime.p7s (5K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

İsmail Dönmez-2
In reply to this post by Jiri Slaby-6
Hi,

On 27 Jun 11:03, Jiri Slaby wrote:

> On 06/26/2017, 03:26 PM, jan matejek wrote:
> > * note that if a script is using "/usr/bin/python" as shebang (or worse, "/usr/bin/env python"),
> >   it's already wrong. The shebang must be versioned, unless the script actually works
> >   with an arbitrary python version
>
> Ugh, this will be tough.
>
> An average system:
>
> # grep '#!.*python$' /usr/bin/*|wc
>     107     182    4485
> # grep '#!.*python[23]' /usr/bin/*|wc
>      51      52    1936
>
> You can start with fixing llvm which:
> * has "#!/usr/bin/env python" and "Requires Python 2.7"
> * thus makes the whole Xorg world depend on python 2
python dependencies are only in subpackages which is not a Mesa dependency
(hence Xorg) but I guess I might have missed a file or two, can you tell me
which files you see these dependencies in?

Regards,
ismail

--
SUSE Linux GmbH, GF:  Felix Imendörffer,  Jane Smithard,  Graham Norton,
HRB 21284 (AG Nürnberg)  

signature.asc (849 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Dominique Leuenberger / DimStar
In reply to this post by jan matejek-4
On Mon, 2017-06-26 at 15:26 +0200, jan matejek wrote:
> What will happen:

> What else will happen:
> * python packages that are not yet converted to singlespec will
> switch over to python3.

That can have nasty side-effects too: some packages received an
explicitly Provides python2-FOO so that they can assist in the single-
spec migration process; if those packages would now switch to be
python3, then the provides is out of place and would need to be
addressed.

I'm not sure (yet) how we can easily identify those special cases
though.

Cheers,
Dominique

signature.asc (201 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Peter Simons
In reply to this post by Stephan Kulow-3
Stephan Kulow writes:

 > Can we make /usr/bin/python smart to know if it was started as part
 > of a shebang and output a warning?

That warning would be quite annoying to people who actually make an
effort to write scripts that work with both Python 2 and 3.

Best regards,
Peter
--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Simon Lees-3
In reply to this post by Dominique Leuenberger / DimStar


On 27/06/17 17:02, Dominique Leuenberger / DimStar wrote:

> On Mon, 2017-06-26 at 15:26 +0200, jan matejek wrote:
>> Fellow openSUSists,
>>
>> this has been a long time coming, and I'd now like to start the
>> actual process of switching the
>> default Python implementation to Python 3 in Tumbleweed.
>
> I'd like to point to https://www.python.org/dev/peps/pep-0394/ again...
>
> """The main barrier to a distribution switching the python command from
> python2 to python3 isn't breakage within the distribution, but instead
> breakage of private third party scripts developed by sysadmins and
> other users. Updating the python command to invoke python3 by default
> indicates that a distribution is willing to break such scripts with
> errors that are potentially quite confusing for users that aren't yet
> familiar with the backwards incompatible changes in Python 3."""
>
> is openSUSE *REALLY* the distro that is willing to break user scripts?
>
This is probably the wrong question to ask, A better one probably is
anyone willing to maintain python2 in openSUSE post 2020 when it goes
end of life? This gives us 2.5 years to try and make the migration as
smooth as possible so starting now is probably a decent idea.

Users have already had 9 years to migrate I suspect if they haven't
started yet there probably not going to bother until stuff starts
breaking anyway, unfortunately we can't do much about users but yeah we
should try and get our stuff in as good a shape as possible before doing
the switch.

--

Simon Lees (Simotek)                            http://simotek.net

Emergency Update Team                           keybase.io/simotek
SUSE Linux                           Adelaide Australia, UTC+10:30
GPG Fingerprint: 5B87 DB9D 88DC F606 E489 CEC5 0922 C246 02F0 014B


signature.asc (499 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Fabian Wein
On 06/28/17 02:00, Simon Lees wrote:
> Users have already had 9 years to migrate I suspect if they haven't
> started yet there probably not going to bother until stuff starts
> breaking anyway, unfortunately we can't do much about users but yeah we
> should try and get our stuff in as good a shape as possible before doing
> the switch.

And it goes really smooth with 2to3. The only issue I had was that
there is no replacement for libxml2 and I had to switch to lxml which
works for python2 and python3

I might be my fault however, but I had issues in finding 2to3 and in
the end installed it manually. I did not find it installed and could
not figure which package contains it.
--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Switching default python to Python 3

Martin Pluskal-2
In reply to this post by Stephan Kulow-3
On Tue, 2017-06-27 at 08:15 +0200, Stephan Kulow wrote:

> Am 26.06.2017 um 22:34 schrieb Rüdiger Meier:
> > FYI I have access to a very large SLE cluster. There are many users
> > running "python" jobs and they expect python2. Let them survive the
> > update!
> >
>
> Oh! Of course Rüdiger! We really need to have your users survive, we
> shouldn't do anything that kills them or even endangers their lives.
> We definitely are in agreement here! This is a RED LINE!
>
> But FYI: this is just a switch in python defaults for Tumbleweed, no
> one
> will be hurt.
>
I guess that this would be good selling point to promote openSUSE -
something like "openSUSE - distribution that does not kill it's users"
or if we want be more aggressive we could say "Unlike XY, we don't
kill our users"

M
--
To unsubscribe, e-mail: [hidden email]
To contact the owner, e-mail: [hidden email]

123