Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Unity Future .NET Development Status

Discussion in 'Experimental Scripting Previews' started by JoshPeterson, Apr 13, 2021.

  1. JoshPeterson

    JoshPeterson

    Unity Technologies

    Joined:
    Jul 21, 2014
    Posts:
    6,773
    I can't discuss specific release dates, but I can say that we expect Unity to be up to date with the latest C# and .NET features available from Microsoft. So for now, I would stick to C# 8, since that is the latest version Unity supports. But C# 12 will be coming on in November from Microsoft with .NET 8, so you can see we have a number of C# and .NET versions to catch up on. We do expect Unity to support at least C# 12 when we release new .NET support.
     
    NotaNaN, saskenergy, Anthiese and 2 others like this.
  2. TangerineDev

    TangerineDev

    Joined:
    Sep 28, 2020
    Posts:
    122
    Well old code will still work, no?
    Don't refactor something that isn't broken per se...
     
  3. JoshPeterson

    JoshPeterson

    Unity Technologies

    Joined:
    Jul 21, 2014
    Posts:
    6,773
    Yes, old C# code will still work. There will be a few breaking changes. The most impactful will likely be around editor iteration related to enter/exit play mode. Mono uses .NET AppDomains to handle this, but AppDomains don't exist in new .NET, so we're working on a replacement that uses AssemblyLoadContext.

    Your best bet is to target all C# code now to compile against .NET Standard 2.1, then we expect it to "just work" with new .NET in Unity.
     
  4. OldPocketWatch

    OldPocketWatch

    Joined:
    Jun 16, 2021
    Posts:
    7
    Thank you for asking, but it’s not a big deal. It’s mainly some concerns because I’ve encountered similar situations before. Specifically, after Unity introduced support for the source code generator, I built a small framework for reading and serializing data specifically for entities (to facilitate interaction with the editor and non-entity parts). However, after working on it for months, DOTS 1.0 was released, which provided basic functionality that met my needs, putting me in a dilemma between “rewriting around the new DOTS features” and “continuing to improve my own imperfect framework.” But I believe this topic is not suitable for a detailed discussion in this thread, and I have already resolved the issue now.
    So the main reason for the question above was just a general concern, especially considering that Unity will have native NuGet support in the future, and other frameworks will always be better than my own simple framework. However, since there is still a lot of work to be done for Unity Team, I don’t need to worry about this issue anymore. After all, it’s not practical to wait for years just to save some effort.

    Makes sense. I think the best choice now is to do whatever needs to be done.

    Thank you for the response. I understand the current situation now.;)
     
    TangerineDev likes this.
  5. CaseyHofland

    CaseyHofland

    Joined:
    Mar 18, 2016
    Posts:
    549
    Ey, you don’t know that! You can be really special in how you approach a problem!

    I come across a lot of monolithic code, where I express myself in really small objects with a lot of editor friendliness. There’s a place for that.

    (Takes a S***ton of time tho XD)
     
    TangerineDev likes this.
  6. RaventurnPatrick

    RaventurnPatrick

    Joined:
    Aug 9, 2011
    Posts:
    167
    Can you clarify if this would likely need some changes such as avoiding static state inside the editor? If so it would help us to slowly prepare our projects for this upcoming change.
     
    Radusek likes this.
  7. JoshPeterson

    JoshPeterson

    Unity Technologies

    Joined:
    Jul 21, 2014
    Posts:
    6,773
    The best option to prepare your projects is to make sure they work with "Configurable Enter Play Mode". See for more details: https://blog.unity.com/technology/enter-play-mode-faster-in-unity-2019-3

    This is an option you can enable, which will end up with very similar behavior to the AssemblyLoadContext solution we will have to new .NET. We're currently adjusting Unity code internal to the editor to work with this. Any project code you can make work now should work with enter/exit play mode with new .NET.
     
  8. SevenPointRed

    SevenPointRed

    Joined:
    Feb 3, 2016
    Posts:
    199
    How will this work with 3rd party libs? Sometimes its impossible to use the new enter play mode.
     
  9. bdovaz

    bdovaz

    Joined:
    Dec 10, 2011
    Posts:
    1,015
    I have always thought about it and if Unity does not develop a Roslyn analyzer (if it is possible) that analyzes certain bad practices that contribute to not working with that mode, it is a difficult problem to solve.

    And yet it is still a problem because even if there is such an analyzer, nothing prevents you to publish an asset / package violating those rules.
     
    TangerineDev likes this.
  10. Laicasaane

    Laicasaane

    Joined:
    Apr 15, 2015
    Posts:
    289
    For open source libs I usually issue a feature request or prepare a PR in case it's simple to do that. The last resort would be working on my own fork.
     
  11. CaseyHofland

    CaseyHofland

    Joined:
    Mar 18, 2016
    Posts:
    549
    So when you say “very similar behavior”, does that mean we still have to reset our static values inside of RuntimeInitializationMode.SubsystemRegistration? It would be amazing if the new solution could be more aware of statics and give us both worlds: no domain reloads, but auto-resetting statics on playmode enter/exit.

    If that is impossible I would also love to know it! I’ll just continue using RuntimeInitializationMode.SubsystemRegistration no problem.
     
  12. JoshPeterson

    JoshPeterson

    Unity Technologies

    Joined:
    Jul 21, 2014
    Posts:
    6,773
    Yes, this is a problem we are considering. We plan to work with asset store published and popular third party libraries to ensure that they are working properly. But the process of getting this all working will take time, no doubt. Our intention is to make the necessary changes small enough that they will be easy to implement. That should aid the transition.

    Yep, Roslyn analyzers for this are in development now. They won't solve all of the problems, but they should give helpful hints for source code you have access to in your project.
     
    Luxxuor, NotaNaN, peter_hall and 7 others like this.
  13. RaventurnPatrick

    RaventurnPatrick

    Joined:
    Aug 9, 2011
    Posts:
    167
    I tried the assembly load contexts with .Net7 and it seems they now properly reset static state:
    Code (CSharp):
    1.  
    2. public class Program
    3. {
    4.     static void Main()
    5.     {
    6.         Proxy.X = 15;
    7.         var alc = new System.Runtime.Loader.AssemblyLoadContext("MyTest", true);
    8.         var asm = alc.LoadFromAssemblyPath(typeof(Program).Assembly.Location);
    9.         var proxy = asm.CreateInstance(typeof(Proxy).FullName);
    10.         Console.WriteLine(proxy.GetType().GetMethod("Increment").Invoke(null, null));
    11.     }
    12. }
    13.  
    14. class Proxy
    15. {
    16.     public static int X;
    17.     public static int Increment() => ++X;
    18. }
    19.  
    This outputs 1 (static state is reset!)

    Also see: https://stackoverflow.com/questions/59019761/does-assemblyloadcontext-isolate-static-variables
     
  14. CaseyHofland

    CaseyHofland

    Joined:
    Mar 18, 2016
    Posts:
    549
    @JoshPeterson could this mean statics will properly reset in Unity .NET7 as well?
     
    TangerineDev and OUTTAHERE like this.
  15. xoofx

    xoofx

    Unity Technologies

    Joined:
    Nov 5, 2016
    Posts:
    412
    We cannot share yet any concrete technical details about how this is exactly going to work as we are just starting the implementation of that specific part, but we know that the cooperative approach won't require changes to existing user code as it will keep the existing behavior valid (i.e. user code assemblies will be reloaded whenever there will be a code change).

    Only Unity code will have to adapt to leverage and comply to a cooperative model. As we expect to not have to reload any Unity assemblies with this approach, this is where it will bring significant improvement on iteration time during code reload.

    That being said, we will provide guidance to user code to be more compliant and solid with a cooperative model (e.g if a FileStream is opened after a code reload, it should be closed before the next code reload).

    In the long term, we would love to provide the possibility for a user code assembly to not be reloaded on code changes, but we haven't defined yet how this can be made safe and sustainable. This won't likely be part of the first iteration.

    So to your question, it is probably still a good hygiene to keep the code "reloadable" friendly with the expectation that static variables might not be resetted.
     
    Last edited: Aug 3, 2023
  16. rdjadu

    rdjadu

    Joined:
    May 9, 2022
    Posts:
    103
    Fck, this S*** may just be the most exciting stuff coming for Unity in a good while. Okay okay, DOTS wasn't too shabby either but this one here is a win for just about every single Unity user. Keep it up guys.

    Approach of taking Unity internal DLLs out of domain reloads (whatever their name will be in the new mode) sounds great. Even just the getting the entire editor out of there sounds like a massive win.

    This would be awesome. Especially for package devs.
     
    TangerineDev likes this.
  17. Aphemuru

    Aphemuru

    Joined:
    Jul 27, 2014
    Posts:
    4
  18. CaseyHofland

    CaseyHofland

    Joined:
    Mar 18, 2016
    Posts:
    549
    I would actually not prioritize this. I would much rather have latest .NET version asap, and replacement of Assembly Definition for .csproj not far behind. Once the compilation is tightly integrated with .NET, we already get a lot of free benefits. After that, it will also be much easier to define a clear path towards hot-reload.

    While the link you posted is great, it wouldn’t work like that for Unity- why was somewhere pages and pages back in this thread and unfortunately I forgot, but I remember it was discussed and shelved for good reason.
     
  19. Maria_Angelova

    Maria_Angelova

    Unity Technologies

    Joined:
    Mar 3, 2020
    Posts:
    29
    On the topic of statics resetting on Enter Play Mode without a domain reload, I'd like to elaborate. Currently we don't intend to do any automatic discovery and resetting of statics. This is for a couple of reasons:
    1) Unity cannot be certain what the correct value to reset to when entering play mode - this is best defined by the author of the static. If we take a "best guess" approach, it may assign the wrong thing sometimes - we'd need APIs for "correcting" the automatic reset behavior.
    2) It is likely unnecessarily costly to discover and assign all statics in a big project - eg, they may and many probably already do have the correct values in all code that wasn't exercised in any meaningful way.
    We aim at evolving how Unity behaves towards "doing less and only when instructed to" in order to achieve much better performance and iteration time.
    We will however
    1. Improve our APIs for both handling Enter/Exit Play Mode as well as Code Reload:
    - better named and easy to understand and discover attributes for static initialization functionality and managing state at the right times (eg RuntimeInitializationMode.SubsystemRegistration will not be needed
    - consistency between player and editor (so you don't need to hook up the reset state functionality in different ways for each of them)
    - going away from forcing usage of static constructors with [InitializeOnLoad]
    You'll be able to provide a single static method which sets clean state by attaching one of the new lifecycle API attributes to it, and Unity will execute it both after loading the assembly, when entering play mode in the editor, when stating the player. You'll also be able to hook up a symmetric method for deinitialization, which will execute before reloading code, when exiting play mode and when quitting the editor.
    We may also add handy attributes to attach to static state directly to provide the value to assign at the exact same times.

    2. Integrate a Roslyn Analyzer to detect and point to static mutable state which may not be resetting on Enter Play Mode.

    3. Make sure all Unity code complies to the needs of Fast Enter Play Mode and supports it correctly.

    Hope this makes sense :)
     
    Last edited: Aug 7, 2023
  20. Ziron999

    Ziron999

    Joined:
    Jan 22, 2014
    Posts:
    278
    The fact is, if Unity can't keep up with C# then it is completely useless.
     
  21. Ziron999

    Ziron999

    Joined:
    Jan 22, 2014
    Posts:
    278
    It still can't even do 6 and 7 is almost finished. It's pretty bad...
    upload_2023-8-12_16-47-24.png
     
  22. CaseyHofland

    CaseyHofland

    Joined:
    Mar 18, 2016
    Posts:
    549
    This thread has been 2 years ongoing about this exact thing. The team is pretty transparent about the monumental tasks ahead of them and how they are making steady progress. There exists proof of their progress in the changelogs of new Unity versions, mostly in alpha and beta.

    @JoshPeterson , the lead engineer on this (from what I gather) has amassed such a reputation in this thread that he could post “I’m going to kill this puppy” tomorrow and it would still get 6 likes.

    You’re in good hands, unfortunately “due to historic reasons” it just takes a while.
     
  23. Laicasaane

    Laicasaane

    Joined:
    Apr 15, 2015
    Posts:
    289
    They are working on a foundation to accomodate this need of everyone. But that foundation is just huge and requires that much time. I can understand if you are new to this thread. But unfortunately your complain doesn't bring anything new nor useful to the table since they have already been working on it for a while. You have to wait, like everyone else here.
     
  24. Mindstyler

    Mindstyler

    Joined:
    Aug 29, 2017
    Posts:
    224
    Seems like you can't keep up as well. .net 7 has been fully released almost a year ago. .net 8 is almost ready by now.
    Stop throwing around nonsense and read this thread first! They have been hard working on the .net migration for years now.
     
    bdovaz likes this.
  25. XJDHDR

    XJDHDR

    Joined:
    Mar 31, 2020
    Posts:
    20
    That's a massive False Dilemma fallacy. Just because Unity doesn't support the latest C# version at this very moment doesn't automatically mean that what it does support is therefore useless. You have arbitrarily excluded the middle ground position that the current C# support is good, but could be better. The fact that there are lots of people making products using the Unity engine, and making money from them, doesn't line up with your claim that the scripting API those products depend on is "completely useless".

    As for your error, the problem is on your end. I just created a new Unity project and made a script that invokes two of BitConverter's methods. I had no errors at all, let alone the one in your screenshot. So that error is because you broke something and have no one but yourself to blame.
     
    Last edited: Aug 13, 2023
    TangerineDev and bdovaz like this.
  26. Ziron999

    Ziron999

    Joined:
    Jan 22, 2014
    Posts:
    278
    No, it's because i wrote it in .Net 7, I lowered to the old 4.8 with the exact same code and it works. this is 100% false.

    EDIT: I tried .net 5, 6 & 7. no go, only works in 4.8 or lower.
     
    Last edited: Aug 13, 2023
  27. Mindstyler

    Mindstyler

    Joined:
    Aug 29, 2017
    Posts:
    224
    You can't write in Unity with .net 7.
    This is only possible if you write it seperately and import it as a pluging in the .dll format.

    If you did this and it fails it's still your very own fault and not Unity's.
    Furthermore, it is your fault for not knowing the tools you work with.
     
  28. XJDHDR

    XJDHDR

    Joined:
    Mar 31, 2020
    Posts:
    20
    Are you saying that you compiled a DLL against those frameworks outside Unity, then tried to use them in your Unity project as-is? If so, this is expected behaviour. A C# DLL needs to run in an environment that is compatible with the framework it was compiled against.

    Why are you trying to do this though? Why not just place the source code for the DLL in your project and let Unity handle compiling it? Also, are you aware that the latest framework Unity currently supports is Standard 2.1, not Framework 4.8?

    Regardless though, my main point still stands. Just because Unity doesn't support the latest C# version at this very moment doesn't automatically mean that what it does support is therefore useless.
     
    bdovaz likes this.
  29. Ziron999

    Ziron999

    Joined:
    Jan 22, 2014
    Posts:
    278
    in 2023 preview you can do both and both don't work.
    2.1 should support 7 but for some reason it doesn't:
    .NET Standard | Microsoft Learn
    .NET and .NET Core 3.0, 3.1, 5.0, 6.0, 7.0
    so, in 2023 preview you can pick 2.1 but it actually isn't 2.1??
     
  30. Ziron999

    Ziron999

    Joined:
    Jan 22, 2014
    Posts:
    278
    I've got to be missing something or unity is lying. So hopefully I am just missing something. That would be a better result for everyone lol
     
  31. ProtoTerminator

    ProtoTerminator

    Joined:
    Nov 19, 2013
    Posts:
    566
    @Ziron999 You have it backwards. .Net 7.0 supports .Net Standard 2.1. Not the other way around.
     
  32. Ziron999

    Ziron999

    Joined:
    Jan 22, 2014
    Posts:
    278
    I figured it out, the dll location has changed. I can now run my own dedicated server with my own code with .net 7 and unity works with it finally!!!! this is very good. This maximizes performance and multithreading by a large margin. I hope unity keeps up with this because it is very important if they are going to stick with c# being the main language.
     
  33. Spy-Master

    Spy-Master

    Joined:
    Aug 4, 2022
    Posts:
    284
    You don't seem to comprehend what the words you're using mean.
    .NET Standard 2.1 is a baseline set of APIs that can be relied on and targeted as a pseudo-framework for assemblies that all the actual frameworks that implement that version of .NET Standard can load and use.
    Unity uses a Mono version that supports this .NET Standard 2.1 API level, but does not have the BCL for .NET 7.
    .NET Standard 2.1 includes a wide breadth of APIs that are quite good for games development (including handy things like the Span<T> memory abstraction for performance-sensitive code).
    You need to use assemblies that specifically target .NET Standard 2.1 or some lower .NET Standard level to ensure compatibility with Unity. That, or again, compile code with Unity itself. This shouldn't be that big of an issue, Unity uses the same Roslyn compiler technology as mainline .NET does, you're limited by the current supported C# level and API surface area from .NET Standard 2.1.
    Word to the wise, even though .NET Framework 4.8 may be newer by release date, it does not include parts of .NET Standard 2.1 and is therefore not defined to implement .NET Standard 2.1. The APIs available in .NET Framework 4.8 that aren't available in .NET Standard 2.1 could be considered less useful for most games, generally platform-specific things such as WinForms. It is advisable to use .NET Standard for the current set of functionality that makes it useful as well as the easier transition to whatever .NET version Unity lands on in the future.
     
    TangerineDev and bdovaz like this.
  34. Ziron999

    Ziron999

    Joined:
    Jan 22, 2014
    Posts:
    278
    weird, my code works in both directions now after finding the new location for the dll needed. the funny thing is, i really don't even need the dll anymore. everything can just become bytes, ints, floats, etc in the end anyway lol.
    it's really just for lazyness.
     
  35. CaseyHofland

    CaseyHofland

    Joined:
    Mar 18, 2016
    Posts:
    549
    So… everyone was right, it was your fault, and again Unity is already keeping up with this it just takes time.

    Look there is no shame in making a mistake, as programmers that’s 90% of our job, but be humble enough to say it.

    “If they are going to stick with c# being the main language”? …yah …I think they will.

    Can’t imagine how it maximizes performance unless you're using massive amounts of reflection or System.Linq, otherwise it’s not Unity where that performance is suddenly coming from. Those were 2 of the biggest .NET 7 improvements I think.
     
    Last edited: Aug 14, 2023
  36. Acegikmo

    Acegikmo

    Joined:
    Jun 23, 2011
    Posts:
    1,293
    Just wanted to check in to see if this is still the case? The C#11 static abstract interface operators for numeric types would be a heckin *blessing* to all my (admittedly math heavy) projects (along with the buckets of QOL changes), especially if implemented across unity's vector types so that we can do generic algebra with operators and all across multiple dimensions like:

    Code (CSharp):
    1. // Assuming the new C#11 numerics/operator interfaces
    2. // are implemented in Vector2/Vector3/Vector4:
    3. public V Lerp<V,S>( V a, V b, S t )
    4.    where V : IAdditionOperators<V, V, V>
    5.    where V : IMultiplyOperators<S, V, V>
    6. {
    7.    return ( 1 - t ) * a + t * b;
    8. }
    This one method would allow:
    Code (CSharp):
    1. Lerp( float, float, float )
    2. Lerp( float, float, float )
    3. Lerp( Vector2, Vector2, float )
    4. Lerp( Vector3, Vector3, float )
    5. Lerp( Vector4, Vector4, float )
    6. Lerp( Vector4, Vector4, int )
    7. Lerp( Vector4, Vector4, double )
    8. Lerp( Vector4, Vector4, decimal )
    9. // and many more
    This would make a generic lerp method that you could use for all unity's VectorX types, in addition to almost all built-in types for a 1D lerp (float, double, Decimal, etc.)

    short snippets like lerp is easy enough to work around, but as soon as it grows into something much larger and complex you end up either having to duplicate a ton of code (which is a nightmare to manage) or use code generation (which makes editing/iterating hard) or sacrifice performance (by using runtime type checking). I've ended up having to make code generators for things like this multiple times now, having this would save so much work
     
    Last edited: Aug 14, 2023
  37. Mindstyler

    Mindstyler

    Joined:
    Aug 29, 2017
    Posts:
    224
    This will ABSOLUTELY NOT come before the .net transition, since this is NOT a C# feature, but requires actual runtime changes.
    Furthermore, Unity will have to add those interfaces to their types retrospectively after the transition, and this is not something that 'happens automatically'. But i'd rather they do the transition first without adding these interfaces to their types, since that will give us the transition sooner.
     
    TangerineDev and Anthiese like this.
  38. Acegikmo

    Acegikmo

    Joined:
    Jun 23, 2011
    Posts:
    1,293
    woah okay I'm so sorry for requesting support for C#11 which is apparently not a C# feature lol, idk why you're being so aggressive

    first, there's no dichotomy between doing one or the other "first", unity is more than one person, and could do both C#11 and CoreCLR and finish them in whatever order, there's no dependency between them as far as I know, and I'm just asking if it's still the case that they plan on finishing CoreCLR first, especially since the CoreCLR move is significantly more work than upgrading to C#11

    secondly, as for Unity making use of C#11 interface operators in their existing vector types - it would be nice! but it wouldn't be a dealbreaker if I had to that part myself, if Unity doesn't have the resources/care/priority to. As far as I know, adding those interfaces wouldn't incur any breaking changes or changes to runtime code, only add the possibility to type constrain them using the new C#11 numeric operator interfaces. It's just a matter of adding those interfaces to the class definition, that's all you need for basic support.
     
  39. Mindstyler

    Mindstyler

    Joined:
    Aug 29, 2017
    Posts:
    224
    I'm not aggressive. Just highlighting the important points.
    Abstract static interface members are not a pure C# syntax feature. They require runtime support to work, which is what i said.
    Btw, those interfaces are absolutely binary breaking.
     
  40. Acegikmo

    Acegikmo

    Joined:
    Jun 23, 2011
    Posts:
    1,293
    I still don't see why that should prevent unity from upgrading to C#11, again they could work on both, there's no need to wait until the CoreCLR move is done (as far as I know), it's just what they've decided back then, and I'm just wondering if that's still the case
     
    Last edited: Aug 14, 2023
    apkdev likes this.
  41. Mindstyler

    Mindstyler

    Joined:
    Aug 29, 2017
    Posts:
    224
    They could work on C# 11, but they would not be able to get all features of C# 11 to work. To support all C# 11 features, such as abstract static interface members, they need CoreCLR. Why should they put effort into a subset of C# 11 that will become obsolete anyway once they do the full transition? Especially since C# 11 did not add features you couldn't do without for a little bit longer.
     
  42. Acegikmo

    Acegikmo

    Joined:
    Jun 23, 2011
    Posts:
    1,293
    oh, alright! I was under the impression it would be possible to upgrade to C#11 without doing the CoreCLR move
     
  43. Mindstyler

    Mindstyler

    Joined:
    Aug 29, 2017
    Posts:
    224
    No that's what i'm telling you the whole time. Some features of C# 11 require changes in the runtime, aka they require CoreCLR.
     
  44. Acegikmo

    Acegikmo

    Joined:
    Jun 23, 2011
    Posts:
    1,293
    yeah, sorry that wasn't clear to me
     
  45. JoshPeterson

    JoshPeterson

    Unity Technologies

    Joined:
    Jul 21, 2014
    Posts:
    6,773
    LOL, I don't think that would go over well, nor should it!

    There are no plans to stop the .NET Modernization initiative. We're actively working on it now, with many people involved.
     
    Nad_B, Matrix, cal_cal and 5 others like this.
  46. JoshPeterson

    JoshPeterson

    Unity Technologies

    Joined:
    Jul 21, 2014
    Posts:
    6,773
    Yes, to be clear, we don't plan to update to a new C# version until we can get the runtime to CoreCLR. With that said, once the runtime is on CoreCLR, we will support the latest C# version that is released, and we plan to continue in the future to support the latest C# version as soon as it is released.
     
  47. Acegikmo

    Acegikmo

    Joined:
    Jun 23, 2011
    Posts:
    1,293
    alright! is it still slated for 2024? (from what I read in a 2022 unity blog)
     
  48. JoshPeterson

    JoshPeterson

    Unity Technologies

    Joined:
    Jul 21, 2014
    Posts:
    6,773
    We're not talking about ETAs for specific releases yet, sorry. Keep and eye on this thread though, I'll definitely mention it here just as soon as I can!
     
    apkdev, cxode, TangerineDev and 2 others like this.
  49. Acegikmo

    Acegikmo

    Joined:
    Jun 23, 2011
    Posts:
    1,293
    its ok you can dm me I won't tell anyone
     
  50. MiTschMR

    MiTschMR

    Joined:
    Aug 28, 2018
    Posts:
    358
    That's what everyone says :p. I wouldn't dig too deep for a year number or date estimation, they will tell us when it's getting near. The status updates here provide us with quite a lot of information of what is happening behind the scenes. There will also be a blog post in autumn I think where they explain more stuff.
     
    CaseyHofland, TangerineDev and bdovaz like this.