 So have you ever ready My name is Eko checker. She has been introduced. I've worked at redhead to multi-arch federal multi-arch team I am federal and GC like one compiler Know that the big-time contributor to to the compiler, but some I maintain go in federal and I'm basically responsible for the for the compiler. There are some other Com maintainers maintainers, but like most of them are inactive and I'm really the only person at the moment We also have I'm also member of the federal go and container special interest groups, which we started last year That's from my introduction We have go in federal if you have now We have over 700 packages that are using a compiler and they are written and go or they are providing wrappers for for for for the libraries and other stuff There are on all architectures that are currently supported except from the power PC 64 bit big Indian and 41 bit mainframe, which are all now dropped for our ability from active releases So it's not big deal All the packages include all the cloud native stuff like Docker, Kubernetes, OpenShift origin, Portman and many many many more tools. It is CD And the very helpful is the go seek which we started to help my tender stuff There is Nikols meho it was working on some improvements to the packaging of good projects and It closely tied to this container special interest group Which most of the cloud native stuff is ship with in containers. So we are trying to get there on all of the architectures So I covered some basics of Fedora and I will now dive to the more important interesting bits about the upstream go Like they're coming some I would say kind of big events In this year is the release of go 1.12 which will actually go out in February It's already in Fedora Right and what's will be Fedora 30 and there will be also release probably of go 1.13 and There's some work already going on for go 2 and I'm not sure if it will be released this year But definitely to the whole process might be very interesting to you And I will get in I will get in the end how to get involved both in Fedora and in regular upstream I will Same smallest clamor. I'm not talking on behalf of redhead and I'm not talking on behalf of Google go upstream. So this is my subjective subjective talk so don't don't Don't trust me too much. I would say Verify it and talk with the upstream to get really if the feature that I'm talking about is really important to you talk with the upstream I Look how what's new will be new in go 1.12 As I said, it will be released Probably really soon. It might be within weeks in February I know we're on about anything looking at issues with it. So it should be on track for for the release And we have already have it in Fedora as I said And I will now go to some features in no particular Particular order there are definitely things that I will have missed that might be interesting to you But I was trying to focus on things that are mostly interesting to as much people as possible There is now a razor doctor for 64-bit arm Linux target Which with the inclusion to with the AVS AWS not providing the host it might be interesting for your applications to be able to to run the race detector and Eliminate as much as issues that might be there but probably developing already on Intel and It depends maybe some workstation feature who knows There is no seagull finally for the big end amp RPC Bigger target is there for some time, but it lacked the support for the seagull Which was kind of bummer for some applications. Unfortunately for fair. It's too late. We already dropped the big end amp RPC there There are new ports There is windows 32-bit arm port and They're landed a big and they are on par PC a export Although it is not yet fully featured. There are missing bits as seagull and External linking and some others This is also the last version of go they will support make OS 10.10. So you will need to update your Mac your Mac you probably aware How it will go? Also, this is last version of go that will support binary only packages So there are packages that are only shipped as a as a binary artifacts. So you do not have source code So if you are shipping proprietary like Libraries very are not sharing your source code. You are you are out of luck with future races of go Also go to 12 will focus more on a goal modules that got introduced in 1.11 all There are definitely a little backfix bug fixes and improvements and most notable parts are all the commands that are Working with modules are now parallel safe. So you can write more automation About one single storage location that you have for all your modules or for modules for your project Also, there are extensions to the metadata that are recorded for the module And you can now specify which version of go should be used to building your module Good tool that good deprecating now. You should now use go wet Go cache is now by default on and it's required So you your builds and tests will be cached Go dog binary is now only server is you should use go command dog for command line interfacing with good documentation If you are not using your browser, of course There are some changes to see you on make OS For some core libraries the pointers will now be unit point type or instead of got pointer and there is improved variable lifetime tracking Which my result in finalize is getting around sooner than you might expect it in all the versions of go if It might if it will cause you any troubles like the final is around too soon. You can mark the Variable as always live that using with caution Along the optimization improvements. There is even more aggressive inlining Even a for nested calls In some instances It might again cause you issues at runtime when you are not expecting that the function got in line I actually run today shoes When rebuilding a few packages and testing of new version of go in there is a project called Go local like go go routine local storage and there was some Some parts of it are relying on it that the function do not get in line so there is GC pragma micro Go no inline that you can take your function with but do not really rely on it because it's not part of the language standard is implementation details, so Be careful with that Also is added new flag for the go Go go command which you specify the version of language you are expecting or wanting I Believe this is not really useful at the moment and it will be more or more useful with the possibly upcoming good that Go version 2 and I don't think it's really like that useful at the moment We will see in the future and especially for the compatibility checks There's also some work that is kind of ready to go to to and it's making making the code more or at least the compiler internally more separate from the AB a bi and a call so that the a bi can be changed with the version go with the version 2 I Will delve into the go-to in a bit further There are improvements to the GC and there is There and also there should be more aggressive return of the of the memory to the operating system especially on Linux, which will use now the met met v3 releasing memory Colonel which might not be observable because the kernel needs to reclaimed a memory on its own So you might see still the usage of the memory although it's free There is new go-to-back options that allow you to turn off all the CPU extensions that are used in standard library So so you can like actually measure for example How how how it gets lower? If you do not use the extensions like like vector instructions and stuff like this There is now support of there would be now support for TLS TLS version 1.3 and This is like the highlight of the old feature force go 1.12 in my opinion There are like when you when you get access to the slides, there is link to the whole change notes for that version There are many more changes in the individual Individual packages in the standard library, but I haven't seen anything really significant or game breaking so No, I will move to the What's known about the go version 2? there are For the context the go version 1 have compatibility promise So that absolute one break won't won't break the backwards compatibility So if you had coded was possible to compile a version 1.1 you can still compile it now It should work. It's not a binary or API promise. So if you you will have to recompile all of the dependencies But it's it's taken care of by the go tool. So you know you should never seen that as an issue There are plans for more breaking changes for bigger changes and possibly breaking changes for the next version of go There's plan to be more committed room. Actually, we are currently in phase. We are that they are gathering more feedback. So You should definitely provide it if you are interested in the possibly future changes and You are kind of running out of time The deadline for providing the feedback or the list of official deadline is end of end of January So you should provide it really soon. We will see what changes are coming there There's nice blog post with the overview. So what's going on and There's currently proposed it over a hundred changes smaller and medium-sized in the issue tracker of the go project itself So yeah provide feedback. So you do not so so your heart also your voice is not missed In this and yeah, I believe the upstream is quite receptive to construct the feedback So if you have any worries about the changes Go there and provide some feedback there seems to be Quite bigger draft than just the individual changes and it's especially focused on Error and exception handling which will introduce new keywords. It's check and handle which will provide a special ways for getting rid of the Error idiom which is kind of heavy Nowadays, so you have a lot of writing that should save This should save a lot of writing for you and there's also shaping proposal for the generics So my it's one of the feature. This is most missed by many people in go As I said previously, they're only rounded some changes there are not breaking for the detaching of the Detaching of the implementation from the ABI account conventions. So there might be some changes That I was for more aggressive more aggressive optimizations in function calls so From the from the issue or from the issues that are tracking the changes I picked pick up picked few that I found really interesting and want to share with you There is proposal to not allow ex or do not to do not allow Ignoring return value of a function. So you have to explicitly ignore it because currently you can do that and it can lead to some To some parts that you that you might miss especially if the return value is error So this is one of the it's kind of part of the proposal for better Better better better error handling But it's not it's kind of independent tool You can get one without the other There is also proposal that you could specify your own operators for the types Which is kind of big change but before the proposal proposes also constraints So you cannot mutate for example the past operands and you cannot to type them And for example you unary operators will be defined by the binary operators. So it reduces like Reduces the complexity scope for especially for the reader of the code So you cannot do some crazy stuff that you can do in C++ for example There's also proposal to remove dot imports So you cannot import a whole package to the corner to current namespace the main point is My point of this proposal is so you are so you are explicit about it. You are using functions from different package Which is kind of I believe kind of controversial proposal because it can save you a lot of writing if you can import those Imports whole packages into the namespace but on the hand It doesn't help with your inability because you do not know where where the function is coming from but yeah There is now also proposal for error or panic at the integer overflow wrap around so so So in many cases this kind of like the silent overflow and wrap around of integers variables can lead to some serious security backs especially in like certificate handling and such and With this you have will have to be You have to catch those issues if they'll come Show up in your code Other issue other proposal that actually can help also it over and of rep around is that the UN type should be arbitrary sites So basically the integer type could now hold any value and there is no issue with the rep around and It will be It will be kind of resembles for example, I believe the integers are and let it this way in like functional languages like Haskell So you can really store any size of the word integer value In this although there will be also keep the size type So when you need explicitly sized integers for example for a building for sys calls and allow some little stuff You can still use them but for general generic code And general code it might be better to use the arbitrary size So it prevents some some series of serious issues So This is for all the upcoming changes. I want to point you to to some places where you can get involved Either in the upstream or in federal for upstream You can definitely should check out if you haven't yet the github mirror of the repository very which is used as an issue tracker for the development Also, there are Two quite important mailing lists in the community of going is going nuts, which is user mailing list So if you have like questions that are more user centric Basically all the usage of the compiler You have some code that behaves in your opinion weirdly and you believe it's back You can discuss it there and there is going devil devil mailing list, which is focused also solely on like development of the compiler itself So if you have some feature that you want to propose It might be good to run it first by the go nuts So, you know, like somebody's interesting and it's not totally totally like irrelevant or stupid And then you can try rise some more serious discussion on going devil list or even just file issue in the mirror That on the github mirror For Fedora if you are interesting if you are interested in helping me to make packages that we are via we have in Fedora or You are using Fedora as your development platform. You are developing your application on Fedora workstation You might consider joining Fedora Golang RC channel on 3.0 So you can you see something weird that you believe it's not general generate compiler bug But it's something that But basically I did and I broke the Golang for you in the workstation. You can discuss it there and ping me there We have also mailing list for Golang or for Golang so you can also post there If IRC is not your if you if IRC is not your cup of cup of tea And also if you have some generally changes like you want to ship or project in as a package or Anymore like generic Fedora level stuff like how we should do the packaging like we are if we are doing it wrong in your opinion And you want to write some discussions. There is Fedora devil list, which is centric mostly about generic development of the Fedora and packaging and Last part is we have the special interest group and we have issue tracker for different changes There were one planning in Fedora, especially on the packaging from the packaging the projects Changing the way how the RPMs are how we are the bundling stuff. We are kind of kind of doubling doubling on on the Go line module and go get commands. So we trying to separate separate all the dependencies It's kind of hard job and Not really sometimes not very worthwhile Especially if you have some packages that have like thousands thousands of packing of go packages as dependencies It's really tedious and really hard and sometimes even impossible but Yes, stop by our issue tracker if you think we are we are doing something wrong or you have some ideas So thank you for your attention. Do you have any questions? So you need to recompile I believe so it depends what mechanism you will choose like for installation I believe that that might be might be the reason why they are proposing the length flag so you can actually Set set the compiler to to like version one and compile with the same compiler But I'm not really sure what is exactly Yeah, but I think nothing really Nothing really like Biosphere from using like path manipulation to have both of them There may be also question for from Fedora district Distribution point of view if we want to provide like there are further modules now If you want to provide like more version for one release We are basically now doing like one release Like just the system compiler which is used by the one release Like officially I have some corporate repositories, but I'm not maintaining them much Yeah, it's kind of why reason why I haven't looked into that much because I do not see it that much value Because mostly when you are developing something and you are really like the conversion is really important to you You really want to have all the stuff installed? Parallely so you can switch by just blink of the eye you do not need to run like DNF install or install whatever No more questions. Thank you for your attention. I have a nice one