> On 25 Nov 2019, at 14:37, Yavor Doganov <ya...@gnu.org> wrote:
> 
> Gregory Casamento wrote:
>> On Fri, Nov 22, 2019 at 3:01 PM Yavor Doganov <ya...@gnu.org> wrote:
>>> The answer is simple: because there's a lot to lose and nothing to
>>> gain.
> 
>> This is patently incorrect.  The gain is time and compatibility with
>> the latest code base.  I laid out the advantages and disadvantages
>> of this in my previous posting.
> 
> There are no advantages for the current GNUstep packages in Debian
> which is the main point I was trying to make.  I don't dispute the
> fact that dropping support for GCC will simplify things a lot for
> you.  At certain cost, of course, which you consider negligible.
> 
>> * More Applications, more applications means more end users (sort of
>> chicken and egg thing)
> 
> That's purely hypothetical to the extent of being mere speculation.
> GNUstep supports Clang and David's runtime for quite some time now,
> why there are no more applications?  Why existing GNUstep applications
> have not been updated to take advantage of the new features?

I can tell you exactly why. When I tried out GNUstep for the first time to port 
my OS X apps to Debian, I simply did "apt-get install gnustep" and wanted to 
compile my code and nothing really worked.
Then it took me several weeks to figure out how to get a working toolchain with 
libobjc2 and ARC support which my code required. And I am not a newbie. I write 
code on MacOS since 1994 and Linux since like 1992. The major roadblocks where:

a) the tools which come with Debian where totally useless as it did not support 
modern Objc2 features which my ported code was using already. And it took a 
while to even figure that out.
b) the build process is not well documented. You find all kinds of build info 
out there in the net out of which most are totally outdated and don't work 
anymore. (this has become a bit better since).
c)  there where some bugs, especially in the linking part which where totally 
throwing you off the rails and where giving very puzzling information.
d) if you don't pay attention, the old runtime libobjc which comes with gcc 
gets into your way. And the package is named libobjc4. So go figure that 
libobjc2 is actually newer...

I can assure you that people who are used to MacOS X and Xcode , 99% of it will 
run away. They will simply claim GnuStep is not a mature project.

If you read through my readme   
https://github.com/andreasfink/ulib/blob/master/doc/README-Debian9-stretch.txt 
<https://github.com/andreasfink/ulib/blob/master/doc/README-Debian9-stretch.txt>
 you will see how many things can go wrong.

Part of the problem was that Debian 9 was packaging clang 3.8 which is quire  
old these days and was lacking some stuff as well.
Recent Debian 10 however fixed this and adding clang from the llvm repository 
to get a newer version is kind of not a big issue. These days you need clang8 
or newer if you don't want to run into some nasty bugs and use a prebuilt 
package.

The linker was one of the biggest problem. Easy to fix but very difficult to 
figure.

I also tried other options beforehand. Namely Cocotron. The problem with that 
was that its built for crosscompiling from a Mac. Recent upgrades from Xcode 
basically broke that and I think the folks who work on that are mainly focused 
to get it run well on Windows and don't care so much about Linux. Also there's 
not much happening with Cocotron these days. Hence I dropped using it and use 
GNUStep for all my ObjC code under Linux these days. And for me its performing 
very well, once I had working packages.



>> What's to lose:
>> * Possibly a political issue with the FSF, but there are other projects
>> which depend on languages not implemented by GCC.
> 
> I'm not aware of any GNU package written in a compiled language that
> cannot be built with GCC.

I'm not aware of any other GNU package written in ObjC (or even any other 
compiled language besides C or C++).


> I don't know what you mean by "political issue" but such a drastic
> change should be discussed with the GNU Project of which GNUstep is
> still part of.  It is wrong to decide it with a vote that doesn't even
> specify simple things like who is eligible to vote and based on what
> majority the decision is going to be taken.  As a GNU maintainer you
> should know these things.
> 
>> * Support for older platforms which ONLY support gcc.
> 
> RISC-V is the newest GNU/Linux architecture and it's not yet supported
> by Clang.

Wrong

https://riscv.org/2019/10/llvm-clang-risc-v-now-supports-lto-michael-larabel-phoronix/
 
<https://riscv.org/2019/10/llvm-clang-risc-v-now-supports-lto-michael-larabel-phoronix/>


> 
>> So, I apologize if I don't agree with the "nothing to gain" opinion.
> 
> You are free to disagree.  But as it often happens with real life, the
> loss may become obvious only post factum...  You could be left only
> with the "gain" which may not look like a big gain then.  It could
> even look more like you have shot yourself in the foot.

I think it boils down to the question if we want to keep GNUStep as a clone of 
NextStep (before Apple took over) or if we want it to be useable for porting 
software from OSX to Unix.
For me the answer is clear. 

As far as all the other platforms go which might not be supported by clang and 
are supported by gcc:

Can we get a bit more concrete and list all Debian supported platforms who have 
prebuilt GNUStep packages today and who do not have clang support?

And I mean platforms who will have long term support (not like i386 or Tile or 
something which is about to be dropped).


(https://en.wikipedia.org/wiki/Debian#Architecture_ports 
<https://en.wikipedia.org/wiki/Debian#Architecture_ports>)

As of the Stretch release, the official ports are:[157] 
<https://en.wikipedia.org/wiki/Debian#cite_note-packages_base-files-157>
amd64: x86-64 <https://en.wikipedia.org/wiki/X86-64> architecture with 64-bit 
userland and supporting 32-bit software
arm64: ARMv8-A architecture[158] 
<https://en.wikipedia.org/wiki/Debian#cite_note-two-ports-158>
armel: Little-endian <https://en.wikipedia.org/wiki/Endianness> ARM 
architecture <https://en.wikipedia.org/wiki/ARM_architecture> (ARMv4T 
instruction set)[159] <https://en.wikipedia.org/wiki/Debian#cite_note-159> on 
various embedded systems (embedded application binary interface 
<https://en.wikipedia.org/wiki/Application_binary_interface>(EABI))
armhf: ARM hard-float architecture (ARMv7 instruction set) requiring hardware 
with a floating-point unit <https://en.wikipedia.org/wiki/Floating-point_unit>
i386: IA-32 <https://en.wikipedia.org/wiki/IA-32> architecture with 32-bit 
userland, compatible with x86-64 machines[153] 
<https://en.wikipedia.org/wiki/Debian#cite_note-hreqs2-153>
mips: Big-endian MIPS architecture 
<https://en.wikipedia.org/wiki/MIPS_architecture>
mips64el: Little-endian 64 bit MIPS
mipsel: Little-endian MIPS
ppc64el: Little-endian PowerPC <https://en.wikipedia.org/wiki/PowerPC> 
architecture supporting POWER7 <https://en.wikipedia.org/wiki/POWER7>+ and 
POWER8 <https://en.wikipedia.org/wiki/POWER8> CPUs[158] 
<https://en.wikipedia.org/wiki/Debian#cite_note-two-ports-158>
s390x: z/Architecture with 64-bit userland, intended to replace s390[160] 
<https://en.wikipedia.org/wiki/Debian#cite_note-160>

Lets see what clang-10 supports under Debian10

# llc-10 --version
LLVM (http://llvm.org/):
  LLVM version 10.0.0

  Optimized build.
  Default target: x86_64-pc-linux-gnu
  Host CPU: znver1

  Registered Targets:
    aarch64    - AArch64 (little endian)
    aarch64_32 - AArch64 (little endian ILP32)
    aarch64_be - AArch64 (big endian)
    amdgcn     - AMD GCN GPUs
    arm        - ARM
    arm64      - ARM64 (little endian)
    arm64_32   - ARM64 (little endian ILP32)
    armeb      - ARM (big endian)
    avr        - Atmel AVR Microcontroller
    bpf        - BPF (host endian)
    bpfeb      - BPF (big endian)
    bpfel      - BPF (little endian)
    hexagon    - Hexagon
    lanai      - Lanai
    mips       - MIPS (32-bit big endian)
    mips64     - MIPS (64-bit big endian)
    mips64el   - MIPS (64-bit little endian)
    mipsel     - MIPS (32-bit little endian)
    msp430     - MSP430 [experimental]
    nvptx      - NVIDIA PTX 32-bit
    nvptx64    - NVIDIA PTX 64-bit
    ppc32      - PowerPC 32
    ppc64      - PowerPC 64
    ppc64le    - PowerPC 64 LE
    r600       - AMD GPUs HD2XXX-HD6XXX
    riscv32    - 32-bit RISC-V
    riscv64    - 64-bit RISC-V
    sparc      - Sparc
    sparcel    - Sparc LE
    sparcv9    - Sparc V9
    systemz    - SystemZ
    thumb      - Thumb
    thumbeb    - Thumb (big endian)
    wasm32     - WebAssembly 32-bit
    wasm64     - WebAssembly 64-bit
    x86        - 32-bit X86: Pentium-Pro and above
    x86-64     - 64-bit X86: EM64T and AMD64
    xcore      - XCore


So the real question is: Are we ok to drop support for s390x  in exchange of 
support of Objc2.0 support and much cleaner code in libobjc2 ?


Personally I don't know anyone who even has a s390x so  I can't even tell if it 
makes any sense to have Gnustep on such a platform.



Reply via email to