Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Programming

Author of Swift Language Chris Lattner is Leaving Apple; We're Interviewing Him (Ask a Question!) (swift.org) 339

Software developer Chris Lattner, who is the main author of LLVM as well as Apple's Swift programming language, is leaving Apple, he said today. From a post: When we made Swift open source and launched Swift.org we put a lot of effort into defining a strong community structure. This structure has enabled Apple and the amazingly vibrant Swift community to work together to evolve Swift into a powerful, mature language powering software used by hundreds of millions of people. I'm happy to announce that Ted Kremenek will be taking over for me as "Project Lead" for the Swift project, managing the administrative and leadership responsibility for Swift.org. This recognizes the incredible effort he has already been putting into the project, and reflects a decision I've made to leave Apple later this month to pursue an opportunity in another space. We're delighted to share that we are interviewing Lattner, who says he's a "long-time reader/fan of Slashdot." Please leave your question in the comments section. Lattner says he'll talk about "open source (llvm/clang/swift/etc) or personal topics," but has requested that we do not ask him about Apple, which is understandable.

Update: Lattner is joining Tesla.
This discussion has been archived. No new comments can be posted.

Author of Swift Language Chris Lattner is Leaving Apple; We're Interviewing Him (Ask a Question!)

Comments Filter:
  • by Hognoxious ( 631665 ) on Tuesday January 10, 2017 @02:23PM (#53643379) Homepage Journal

    Is it because you like headphone jacks?

  • by psergiu ( 67614 ) on Tuesday January 10, 2017 @02:26PM (#53643391)

    How cross-platform is Swift ?
    Are the GUI libraries platform-dependent or independent ?
    I.E: can i write a single Swift program with a GUI that will compile, work the same and look similar on multiple platforms: Linux, Mac OS, Real Unix-es & BSDs, AIX, Windows ?

    • Re:Cross-platform (Score:5, Informative)

      by shmlco ( 594907 ) on Tuesday January 10, 2017 @02:34PM (#53643463) Homepage

      Swift is an open-source cross-platform language (there's even a Linux server version), but the Cocoa and Cocoa Touch APIs on OS X and iOS are platform specific.

      • by psergiu ( 67614 )

        Not asking about the Apple GUI ones.
        Just curious if there's a generic one (like Qt, or Swing) or at least a plan to have one in the future.

      • Is there a single swift program actually being used by more than 2 people in a basement which is NOT using these Apple APIs?

        • by keltor ( 99721 ) *
          There's already a bunch of people looking at swift for server side, virtually 100% of those are only looking at Linux as their platform.
          • Looking at? That doesn't answer my question. Is it being used for something else than a toy? And why? If I were to develop a Linux server application, Swift wouldn't even be in my top 10 language choice.

  • C# (Score:5, Interesting)

    by Anonymous Coward on Tuesday January 10, 2017 @02:26PM (#53643393)

    What do you think about Microsoft and C# versus the merits of Swift?

    • by Anonymous Coward

      C# is well-established, and Microsoft has shown that it's very willing to adapt C# as necessary to support new techniques. I wouldn't be surprised at all if C# inherited good ideas from Swift.

      I'm more interested in what Chris has to say about Rust, another much-newer language that's much closer in age to Swift, but also different from established languages like C#, C++ and Java.

      Chris, what are your general thoughts about Rust as a programming language?

      Seeing as it fits somewhere between languages like C++ a

      • Re: (Score:3, Informative)

        While it did get a huge amount of hype at various programming discussion forums in the recent past, a lot of this has died off, perhaps because of people becoming disillusioned with it.

        I don't know what forums you're on but the Rust hype is fucking nuts on HN and reddit. I like Rust quite a lot as a language but I hear about it so much that I'm almost getting sick of it, like Node.js was dominating the hype cycle years ago and Ruby before that.

        Also, while Swift has a very reasonable code of conduct, what are your thoughts about Rust's community, including its rather extreme focus on its code of conduct?

        Lolwut? Swift's code of conduct is lifted almost directly from Rust's, they were both based off the same original document and written by the same person. I've also never seen any "extreme"ness or SJWness in all my time on the Rust forums.

        • I like Rust quite a lot as a language but I hear about it so much that I'm almost getting sick of it,

          Yeah, haha

    • I love C#. It is my favorite programming environment. However, C#, like Java, is wedded to a virtual machine with Just In Time compilation. It was a deliberate and usually sensible design choice.

      Swift, in contrast, compiles to native machine code. That too was a deliberate and sensible design choice. Swift can theoretically be a "systems programming" languages as in, "You can write operating systems with it.". C# is not suitable (as it is) for systems programming because C# programs generally do not intera

    • What do you think about Microsoft and C# versus the merits of Swift?

      Is it:

      What do you think about (Microsoft) and (C#)

      or

      What do you think about (Microsoft and C#)?

  • by Anonymous Coward on Tuesday January 10, 2017 @02:26PM (#53643397)

    Strings are immutable pass-by-reference objects in most modern languages. Why did you make this decision?

    • by shmlco ( 594907 ) on Tuesday January 10, 2017 @03:04PM (#53643725) Homepage

      In Swift arrays, dictionaries and strings are structures with value-semantics. As to why, well, to quote the Swift language reference manual: "One of the primary reasons to choose value types over reference types is the ability to more easily reason about your code. If you always get a unique, copied instance, you can trust that no other part of your app is changing the data under the covers. "

      Behind the scenes, however, structures (including strings) are passed by pointer. Swift then uses copy on write so that the objects are completely copied only if and when the program attempts to change a value in them.

      As such, a string parameter to a function has value semantics, but it behaves as if it's an immutable pass-by-reference object from a performance standpoint. Kind of the best of both worlds.

      An exception would be a parameter specified as inout. (e.g. func f(s:inout String) )

      • What if you pass a string to a function, and a different thread then changes the original string? Does that also copy on write? Or does the function suddenly see the string change?

        (Thread A and thread B both have access to the same string S, B passes S to function F, function F reads S, thread A changes S, function F reads S again)

  • by Anonymous Coward on Tuesday January 10, 2017 @02:43PM (#53643519)

    Its been commented on that Swift tutorials look IDENTICAL to Groovy tutorials to the point that you even use the same variable names in examples (http://glaforge.appspot.com/article/apple-s-swift-programming-language-inspired-by-groovy). When created a Python to Swift converter, I responded 'wouldn't it have been easier to do a 'Swift to Groovy' converter??? To which developers replied, well naturally.

    So how much of Swift was inspired by Groovy? Both come from more high-end language and look and act almost identical.

  • by Joe_Dragon ( 2206452 ) on Tuesday January 10, 2017 @02:45PM (#53643545)

    What hardware is used for workstations at apple?

    Mac pro's?

    Mac pro's with non apple cpu upgrades?

    Imac's?

    Laptops?

    • you forgot the obvious: iPad

    • by Anonymous Coward on Tuesday January 10, 2017 @04:13PM (#53644273)

      Posting as AC, as I have in the past worked for Apple. Most developers at Apple have both a desktop and a laptop, usually an iMac and then whatever portable that they picked when the joined (for some developers this is primarily a meeting tool). Depending on what that developer does they then have a collection of other hardware (often pooled with people on their team) for development and testing (e.g.: hardware with diverse GPUs or screen resolutions). And then in other cases one or more prototype machine (sometimes in special secure labs).

      There is a real culture of making sure that the developers run on the shipping hardware, so ordering anything custom (even more RAM) is often a difficult thing. At one point there was a lottery to determine who got to use the latest shipping iPhones and who was forced to use the oldest supported model, to make sure that people were feeling the pain of older hardware. A number of managers were except from that lottery... they got the oldest model by fiat.

      The build clusters used to be Xserves but that was moving to clusters of Mac minis and MacPros. There were some Windows machines around (think iTunes and Quicktime), and I know some groups that did chip-level-design used linux, but standard Apple hardware rules the day.

  • Exception Handling (Score:3, Interesting)

    by andywest ( 1722392 ) on Tuesday January 10, 2017 @02:49PM (#53643575) Homepage
    Why did Swift NOT have exception handling in the first couple of versions?
    • Answer: because it's the problem with many new languages (e.g PHP). People may not know enough languages or have enough experience to make a new language that includes all other existing (good) features.
  • by superwiz ( 655733 ) on Tuesday January 10, 2017 @02:49PM (#53643581) Journal
    Since you have been involved with 2 lauded languages, you are in a good position to answer the following question: "are modern languages forced to rely on language run-time to compensate for the facilities lacking in modern operating systems?" In other words, have the languages tried to compensate for the fact that there are no new OS-level light-weight paradigms to take advantage of multi-core processors?
    • by shmlco ( 594907 )

      As in Grand Central Dispatch?

      • by zifn4b ( 1040588 )

        As in Grand Central Dispatch?

        I don't know if that's what they're referring to. Grand Central Dispatch sounds similar to C#'s ThreadPool.QueueUserWorkItem() or the await task language features in newer versions of the .NET runtime. It's just a way to basically create some unit of work that conforms to a particular interface that can be queued up and then the language run-time can determine how to create threads, processes, etc. in whatever manner is deems best to execute those pieces of work.

        • by tlhIngan ( 30335 )

          I don't know if that's what they're referring to. Grand Central Dispatch sounds similar to C#'s ThreadPool.QueueUserWorkItem() or the await task language features in newer versions of the .NET runtime. It's just a way to basically create some unit of work that conforms to a particular interface that can be queued up and then the language run-time can determine how to create threads, processes, etc. in whatever manner is deems best to execute those pieces of work.

          Grand Central Dispatch is actually an OS leve

  • Future of LLVM? (Score:5, Interesting)

    by mveloso ( 325617 ) on Tuesday January 10, 2017 @02:53PM (#53643613)

    Where do you see LLVM going?

  • by cide1 ( 126814 ) on Tuesday January 10, 2017 @02:55PM (#53643639) Homepage

    He left his job at Apple, so you are interviewing him? I don't think Chris wants to work at Slashdot all that much. Good luck anyway.

  • by xxxJonBoyxxx ( 565205 ) on Tuesday January 10, 2017 @02:56PM (#53643645)
    Does this mean the Visual Studio based "write once run anywhere" encapsulated in microsoft xamarin won?
    • by ezdiy ( 2717051 )
      There was never a competition, even though it compiles, swift does not abstract android APIs to any reasonable measure to this day so it is extremely inconvenient in practice.

      Even xamarin is far from a silver bullet - it is extremely mobile specific, yet has many even more popular competitors (various js-based stuff, corona is very popular too).
      • Good point on Corona. I'd be happy to append my question to "does this mean that cross-platform mobile development tools like Xamarin and Corona won?"
  • Parallelism (Score:5, Interesting)

    by bill_mcgonigle ( 4333 ) * on Tuesday January 10, 2017 @03:05PM (#53643731) Homepage Journal

    Say, about fifteen years ago, there was huge buzz about how languages and compilers were going to take care of the "Moore's Law Problem" by automating the parallelism of every task that could be broken up. With single-static assignment trees and the like the programmer was going to be freed from manually doing the parallelism.

    With manufacturers starting to turn out 32- and 64-core chips, I'm wondering how well did we did on that front. I don't see a ton of software automatically not pegging a core on my CPU's. The ones that aren't quite as bad are mostly just doing a fork() in 2017. Did we get anywhere? Are we almost there? Is software just not compiled right now? Did it turn out to be harder than expected? Were languages not up to the task? Is hardware (e.g. memory access architectures) insufficient? Was the possibility oversold in the first place?

    • Certain languages like Scala, some Lisp variants, and Erlang do a pretty good job of supporting concurrent and parallel programming. To my knowledge, no programming language fully relieves programmers of the burden of devising design not including race conditions, priority inversions, deadlocks, resource contention producing serialized execution, and countless other "gotchas".

      It is hard enough to find a programmer who can translate a recursive algorithm into a loop or visa versa. It is hard enough to find p

    • Re:Parallelism (Score:4, Interesting)

      by johannesg ( 664142 ) on Tuesday January 10, 2017 @05:36PM (#53644699)

      I did some work on parallelizing FORTRAN in the nineties. It never went very far; our parallelizing compiler ran out of swap space when you fed it anything larger than a twenty-line program. Not that swap space was all that big in those days, but it was clearly not useful in a real-world context. There were some good ideas, but also a great many realities that tended to break those good ideas.

      Today I'd say, but this is after not looking at it very almost two decades, that the granularity at which the compiler is able to work is too fine; parallelism works better when you have larger chunks of work to deal with, which is still very much a programmer job. And at those fine granularities, dependencies (not to mention Amdahl's law) kill your efforts at parallelization.

      So, in my opinion, it was oversold in the first place, and it turned out to be much harder than expected. But it sure sold those research grants...

      • by Viol8 ( 599362 )

        Of course the other main problem is that some problems are simply serial in nature and can't be parallelised (eg various iterative operations, waiting for I/O to continue etc) so it doesn't matter how many cores you have, the program can't run any faster.

  • As someone who has been involved with the development of programming languages, do you think it is still possible to come up with a modern-day replacement for BASIC that can operate in modern GUI environments? It seems like all attempts since went went GUI (aside from maybe early VisualBASIC and Hypercard) have been too complicated, and all attempts have been platform-specific or abandoned. With the emphasis on coding in schools, it seems like it would be helpful to have a good, simple, introductory languag
  • by EMB Numbers ( 934125 ) on Tuesday January 10, 2017 @03:22PM (#53643883)

    I am a 25+ year Objective-C programmer and among other topics, I teach "Mobile App Development" and "Comparative Languages" at a university.

    I confess to being perplexed by some Swift language design decisions. For example,

    - Why does Swift have both a "var" keyword and a "let" keyword? One should be sufficient with the other being a default behavior. If a symbol is not declared "var" then just assume it is constant or visa versa. Furthermore, it may not be necessary to have either of the key words because (I think) in every case, the need for variability and mutation should be determinable by the compiler. Type is already being inferred by the compiler, and mutability could reasonably be considered an aspect of type.

    - Why are Swift collection types like Data always mutable? What happened to the concept of immutable containers from Cocoa. [Yes, I know the "bridged" CF types are always mutable, but that was another bad decision IMHO.]

    - Swift is intended to be a "Systems Programming Language", is it not? Yet, there is no support for "volatile" variables needed to support fundamental "system" features like direct memory access from peripheral hardware.

    - Having experienced frustration trying to port high performance graphics code from C/C++/Objective C to Swift, what's up with that? IMHO, Apple's sample code for using OpenGL/GLKit/Metal from Swift leaves the impression that Swift is unsuited to the style of "low level" programming needed/used by OpenGL/GLKit/Metal.

    - Why not support "dynamic runtime features" like the ones provided by the Objective-C language and runtime? It's partly a trick question because Swift is remarkably "dynamic" through use of closures and other features, but why not go "all the way?"

    - Finally, a trivial aesthetic critique: Why "var foo : typename" like Ada and Pascal (IIRC) instead of "var typename foo" like every language that inherited C style syntax? Is there an advantage to the Swift approach that I haven't seen, or was it just an aesthetic choice? Did the choice not produce some IMHO "silly" syntax for method declarations with named parameters?

    • "every language that inherited C style syntax"

      Swift's aesthetics, as you describe. come from ML - not C. Just as Mozilla's rust began life bootstrapped by OCAML.

      Apple's previous adventure in creating a programming language - Dylan - originally was a LISP.

    • - Why does Swift have both a "var" keyword and a "let" keyword? One should be sufficient with the other being a default behavior. If a symbol is not declared "var" then just assume it is constant or visa versa. Furthermore, it may not be necessary to have either of the key words because (I think) in every case, the need for variability and mutation should be determinable by the compiler. Type is already being inferred by the compiler, and mutability could reasonably be considered an aspect of type.

      Well, for one reason, so that you'll catch typeos in variable names at compile time. You have to explicitly declare the symbols you're going to use.

    • Re: (Score:2, Informative)

      by Anonymous Coward

      For your last bullet point (and also your first), the answer is type inference.

      In a language with strong type inference, ": Typename" is both a compiler hint and an enforcement tool, not a piece of a variable declaration. You don't have to use it during variable declarations, and you can use it in places other than variable declarations.

    • by mbessey ( 304651 )

      - Why does Swift have both a "var" keyword and a "let" keyword? One should be sufficient with the other being a default behavior. If a symbol is not declared "var" then just assume it is constant or visa versa. Furthermore, it may not be necessary to have either of the key words because (I think) in every case, the need for variability and mutation should be determinable by the compiler. Type is already being inferred by the compiler, and mutability could reasonably be considered an aspect of type.

      Having to use a keyword to introduce a new symbol is a pretty critical reliability feature. If there's no keyword to say "I want to define a variable", then every typo creates a new variable, rather than a compiler error. Lots of scripting languages work this way, and it's hell on reliability.

      - Why are Swift collection types like Data always mutable? What happened to the concept of immutable containers from Cocoa. [Yes, I know the "bridged" CF types are always mutable, but that was another bad decision IMHO.]

      They're not. That's why you have "var" and "let" keywords. You use "let" for constants, and "var" for mutable objects.

      - Swift is intended to be a "Systems Programming Language", is it not? Yet, there is no support for "volatile" variables needed to support fundamental "system" features like direct memory access from peripheral hardware.

      "Systems programming" != "device driver development". Nothing above the driver level should be acces

  • When is Apple going to toss macOS (aka OS X) over to the open source community, drop desktop (and possibly) laptop HW completely, and focus solely on mobile HW, iOS, and very thin cars.
  • by Volanin ( 935080 ) on Tuesday January 10, 2017 @03:28PM (#53643921)

    Since you're the creator of LLVM, I'd like to know, in your opinion what's the greatest advantage of LLVM/Clang over the tradicional and established GNU GCC compiler. Also, what's the greatest advantage of GNU GCC (or if you'd prefer, any other compiler) over LLVM/Clang, something that you'd like to "port" someday?

    Also, since I work mostly with Linux development, what do you see as the greatest advantages of the Apple developer stack (libraries, xcode, etc) that are sorely lacking in the Linux developing scene, that we should strive to copy/implement?

    By the way, and unrelated, congratulations on the Walnut Dining Table you made. It's amazing!
    https://twitter.com/clattner_l... [twitter.com]

  • by Foofoobar ( 318279 ) on Tuesday January 10, 2017 @03:31PM (#53643945)
    Its been commented on that Swift tutorials look IDENTICAL to Groovy tutorials to the point that you even use the same variable names in examples (http://glaforge.appspot.com/article/apple-s-swift-programming-language-inspired-by-groovy). When created a Python to Swift converter, I responded 'wouldn't it have been easier to do a 'Swift to Groovy' converter??? To which developers replied, well naturally. So how much of Swift was inspired by Groovy? Both come from more high-end language and look and act almost identical.
  • I'll phrase my question in his preferred, more-readable syntax:

    What.Will?.He?.Do?.At?.His?.New?.Venture?
  • by Anonymous Coward on Tuesday January 10, 2017 @03:47PM (#53644057)

    Is there any hope for VLIW architectures? The general consensus seems to be that Itanium tanked because the compiler technology wasn't able to make the leap needed. Linus complained about the Itanium ISA exposing the pipelines to assembly developers. What are the challenges from a compiler writers perspective with VLIW?

  • This is really an XCode question. But why does XCode not have a native package manager? I've programmed commercial programs with both Visual Studio and XCode and I can say that NuGet is fantastic for C# and really helps boost the C# ecosystem. Why is there nothing like that for XCode.

    Perl and Python also have great external libraries (as probably do other languages that I have never really used)

    Oh and BTW why does refactoring of Swift code suck compared to Objective-C?

    • I know you said native, but for the benefit of others who may not know much about the Xcode ecosystem, you can use the venerable CocoaPods, or the less venerable but more enjoyable Carthage. These both have extremely wide support (CP moreso). CP will generate a whole workspace for you and everything.

      Looking forward, almost certainly Xcode will integrate the Swift Package Manager [github.com] which is still in early days, but you can see it coming down the pike soon, probably official integration this year at WWDC.

  • by haruchai ( 17472 ) on Tuesday January 10, 2017 @03:49PM (#53644075)

    Why is the Operating System Resource Center gone from your site on nondot.org/sabre?
    There are a couple mirrors that date back to 2006 but what happened to the main site?

  • by ezdiy ( 2717051 ) on Tuesday January 10, 2017 @04:02PM (#53644191)
    Let's skip the boring technical details, and ask some juicier insider info.

    Apple has done great things for LLVM/Clang. I believe you were the key conductor in this. Does it mean you leaving we can expect less in this regard in the future, or are you just passing the torch in there, keeping it capable hands (aka there's not much left for you to do)?

    Or some other change of circumstances?
  • Do you see these questions as Optionals?
  • by Kohath ( 38547 ) on Tuesday January 10, 2017 @04:53PM (#53644473)

    I work in the semiconductor industry and our ASIC designs have seen a few large jumps in productivity:
    - Transistors and custom layouts transitioned to standard cell flows and automated P&R.
    - Design using logic blocks transitioned to synthesized design using RTL with HDLs.
    - Most recently, we are synthesizing circuits directly from C language.

    In the same timeframe, programming has remained more or less the same as it always was. New languages offer only incremental productivity improvements, and most of the big problems from 10 or 20 years ago remain big problems. Programmers still have to deal with syntax issues in various languages, and if I want parallel execution in my code, I have to design for it from the beginning.

    Software is helping us design our ASIC circuits from higher and higher level abstractions. But software doesn't seem to be helping us write our software. The abstractions aren't much higher level.

    Do you know of any initiatives that could produce a step-function increase (say 5-10x) in coding productivity for average engineers?

    When I first heard rumors about what became Swift, that's what I was hoping for. But it turned out to be just another programming language.

    • It's beginning to look to me like Functional Reactive Programming (FRP) is the next big change in the way software is created. And whilst Swift doesn't support that natively, there are a couple of libraries that do support it in as Swifty a way as possible: RxSwift and ReactiveCocoa.

      I can't say any more than that, as I'm early on in learning about this topic.

  • Swift governance (Score:4, Insightful)

    by Tough Love ( 215404 ) on Tuesday January 10, 2017 @05:14PM (#53644579)

    Governance of the Swift project is firmly under the control of Apple, as stated here. [swift.org] How can Swift ever be a true community project if Apple controls it? Look no further than Java [computerworld.com] to see what can go wrong when a corporation controls a language.

  • I've been writing Mac and iOS apps with Objective-C for a long time. One of my favorite things about Objective-C is the ability to use C and C++ APIs easily from within my app. Why is Swift even needed at all? What about it is actually better than Objective-C from the standpoint of someone who is already highly proficient in Objective-C and C++?
    • Programming becomes a pleasure again, once you get past the past the hurdle of learning Swifts new features and differences.

      I'll give you 3.

      Swift makes header files unnecessary. Aren't you sick of maintaining both a .h and a .m file for every class?

      Swift makes handling of nulls explicit. In Obj-C any pointer could be nil, and mostly it's not clear if that is actually a meaningful thing, or whether you need to check for nil "Just in case". Swift's optionals mean you always define whether a "pointer" can be n

  • So why Tesla? What makes you a better choice than say, George Hotz ( except that he may not be sane)?
    Do you have AI dev experience?

  • Why? Are you retiring? Going to Google (like a lot of competent engineers)? Creating your own structure? ....
  • I hear you're moving on to work at Tesla [networkworld.com] as VP of Autopilot Software. Congratulations!

    What three things excite you the most about Tesla?

  • Why, oh fucking WHY is their Python Code in the repository? Hasn't the world had enough of it, yet?

  • Expect to be overworked at Tesla... :/
  • Chris, you mentioned you'd continue to be involved with Swift; I've recently been taking some classes involving deep learning / neural networks, and as a result my old dislike of Python is certainly coming to a middle.

    Does your moving to head up the Autopilot Software division provide any indication that deep learning libraries may make their way into Swift so that some of us could engage in deep learning research and trials using that platform as a base rather than Python?

    I fully support languages that are

  • Why dud you make Swift a curly brace language, especially as it seems you admire Python? One thing Python shows is that C style syntax is not the ultimate. I suppose you were in a hurry to get to the interesting stuff and just grabbed onto curly brace syntax?

    I'd like to see a real programming language that can be taught to elementary school students, not toy stuff like Logo or Scratch. These days, seems Python comes the closest to that ideal. Some still seriously recommend C/C++ for the kids.

  • Hi Chris,

    Can you tell us more about your position at Tesla ? What exciting stuff will you do with Autopilot ?

    Do you intend to open-source (parts of) it ?

  • Hi Chris,

    I have my opinion about the respective merits of Rust vs Swift, both being relatively new languages with interesting takes on safety, elegance and performance. What's your take on it ? Retrospectively, what would you have done differently in Swift that Rust got right, and what do you think Rust misses that you put in Swift ?

  • by Parker Lewis ( 999165 ) on Wednesday January 11, 2017 @09:26AM (#53647569)
    Do you run Linux in any station? If yes, which distro? Which pros and cons about Linux desktop distros?

FORTUNE'S FUN FACTS TO KNOW AND TELL: A black panther is really a leopard that has a solid black coat rather then a spotted one.

Working...