Cannot use Zinc in Pharo7 anymore

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
32 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

Stephane Ducasse-3
Calypso is integral part of Pharo as Iceberg.
We started to discuss the problem in the team. Right now this project
spread kills us.

Stef
On Mon, Nov 5, 2018 at 11:56 AM Stephan Eggermont <[hidden email]> wrote:

>
> Tim Mackinnon <[hidden email]> wrote:
> >
>
> > In retrospect,  I’m wondering if successful projects that have proved
> > integration usefulness should be moved into the core repo?
> > (Iceberg/Calypso?) or are we missing something to help easily track the
> > journey of a multi faceted change (although this sounds overkill?). Or
> > are there sprint days to try and knock these things through easily with
> > everyone on board to do it together?
> >
> > We are sort of damned if you do and damned if you don’t. But certainly we
> > want to endure that progress can be made without losing the will to contribute.
> >
>
> Indeed. Putting things in one repo cannot scale and cannot be a solution
> for something that is neither core pharo nor an application. I encourage
> everyone who wants to get a good description of this problem to read
>
> "Managing Design Data: The Five Dimensions of CAD Frameworks, Configuration
> Management, and Product Data Management" by Peter van den Hamer & Kees
> Lepoeter.
>
> With git and github a solution to decouple fast-moving from slow-moving
> projects seems to be indeed to fork and make PRs.
> That only works if the quality of the PRs is high enough and we manage to
> use the feedback from slower-moving projects well.
>
> Earlier, we’ve seen projects like Magma being overwhelmed by the number of
> needed changes, and Pier being broken by Pillar not respecting its
> constraints.
>
> With tools like Travis, it is quickly clear if a PR would result in a green
> build in the original repo.
>
> With projects where Pharo uses only the core, and applications use more
> than that, the applications still have a dependency problem: if the core
> changes in Pharo influence the other parts, someone needs to do the work to
> make those parts work again. With forked repos, that can be a pharo
> maintainer, the project maintainer or the application maintainer. All three
> need to be able to make those changes. And they need to be decoupled from
> having to make them immediately. And being able to have the discussion
> about the exact implementation independently from implementing a stop-gap
> solution now is also valuable.
>
> So if Calypso is supposed to be extendable and only the core part is part
> of Pharo, having it as an external project makes sense. With a fork for
> Pharo to move at its own speed. If Iceberg is Pharo-only, just having
> different branches for different Pharo versions, it sounds to me like it
> might be better of in the Pharo project. Tonel is supposed to be
> cross-platform so should be separate.
>
> Is this helpful?
>
> Stephan
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

Chris Muller-3
In reply to this post by Stephan Eggermont-3
> Earlier, we’ve seen projects like Magma being overwhelmed by the number of
> needed changes,

I'm curious what you meant by this.  I'm not aware of Magma ever
having been overwhelmed.  Its design has made it easy to be one of the
most-available and consumable pieces of software for every version of
Squeak from 2007 to today.  Did you mean the Pharo port?  It doesn't
really do any magic, I'd be surprised if it would be very difficult to
port to Pharo, but I don't know.

 - Chris

Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

Ben Coman
In reply to this post by Stephane Ducasse-3
I get the feeling what is needed is mirroring all dependent repos from
the canonical location under http://github.com/pharo-project
and a Slice-like tool (probably keeping the name "Slice") which...
1. Pulls all dependent repos to the local machine
2. Simultaneously commits to the local repos with the same commit message
3. Updates a bootstrap-configuration file holding commit-hashes of all
the dependencies and commits with same commit message
4. Pushes that bootstrap-configuration file and all changed dependent
repos to user's github account
5. Issues a pull request for the bootstrap-configuration file
6. Our CI then builds a test-image by commit-hash direct from each
user's repo and if it passes, pulls dependent repo commits under
pharo-project
7. CI can then issue PRs to the dependency canonical repos

cheers -ben

On Wed, 7 Nov 2018 at 02:55, Stephane Ducasse <[hidden email]> wrote:

>
> Calypso is integral part of Pharo as Iceberg.
> We started to discuss the problem in the team. Right now this project
> spread kills us.
>
> Stef
> On Mon, Nov 5, 2018 at 11:56 AM Stephan Eggermont <[hidden email]> wrote:
> >
> > Tim Mackinnon <[hidden email]> wrote:
> > >
> >
> > > In retrospect,  I’m wondering if successful projects that have proved
> > > integration usefulness should be moved into the core repo?
> > > (Iceberg/Calypso?) or are we missing something to help easily track the
> > > journey of a multi faceted change (although this sounds overkill?). Or
> > > are there sprint days to try and knock these things through easily with
> > > everyone on board to do it together?
> > >
> > > We are sort of damned if you do and damned if you don’t. But certainly we
> > > want to endure that progress can be made without losing the will to contribute.
> > >
> >
> > Indeed. Putting things in one repo cannot scale and cannot be a solution
> > for something that is neither core pharo nor an application. I encourage
> > everyone who wants to get a good description of this problem to read
> >
> > "Managing Design Data: The Five Dimensions of CAD Frameworks, Configuration
> > Management, and Product Data Management" by Peter van den Hamer & Kees
> > Lepoeter.
> >
> > With git and github a solution to decouple fast-moving from slow-moving
> > projects seems to be indeed to fork and make PRs.
> > That only works if the quality of the PRs is high enough and we manage to
> > use the feedback from slower-moving projects well.
> >
> > Earlier, we’ve seen projects like Magma being overwhelmed by the number of
> > needed changes, and Pier being broken by Pillar not respecting its
> > constraints.
> >
> > With tools like Travis, it is quickly clear if a PR would result in a green
> > build in the original repo.
> >
> > With projects where Pharo uses only the core, and applications use more
> > than that, the applications still have a dependency problem: if the core
> > changes in Pharo influence the other parts, someone needs to do the work to
> > make those parts work again. With forked repos, that can be a pharo
> > maintainer, the project maintainer or the application maintainer. All three
> > need to be able to make those changes. And they need to be decoupled from
> > having to make them immediately. And being able to have the discussion
> > about the exact implementation independently from implementing a stop-gap
> > solution now is also valuable.
> >
> > So if Calypso is supposed to be extendable and only the core part is part
> > of Pharo, having it as an external project makes sense. With a fork for
> > Pharo to move at its own speed. If Iceberg is Pharo-only, just having
> > different branches for different Pharo versions, it sounds to me like it
> > might be better of in the Pharo project. Tonel is supposed to be
> > cross-platform so should be separate.
> >
> > Is this helpful?
> >
> > Stephan
> >
> >
> >
>

Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

NorbertHartl
In reply to this post by Stephane Ducasse-3


> Am 06.11.2018 um 19:54 schrieb Stephane Ducasse <[hidden email]>:
>
> Calypso is integral part of Pharo as Iceberg.
> We started to discuss the problem in the team. Right now this project
> spread kills us.
>
It is not an easy decision. Either you bind everything closely to you and ease your workflow but have to do everything on your own. Or you welcome external projects not done by you and you enter modern dependency hell. Choose wisely or just try to solve the real problem. You neither have the time to develop everything by yourself nor have the patience to spend time on dependencies.

Norbert

> Stef
>> On Mon, Nov 5, 2018 at 11:56 AM Stephan Eggermont <[hidden email]> wrote:
>>
>> Tim Mackinnon <[hidden email]> wrote:
>>>
>>
>>> In retrospect,  I’m wondering if successful projects that have proved
>>> integration usefulness should be moved into the core repo?
>>> (Iceberg/Calypso?) or are we missing something to help easily track the
>>> journey of a multi faceted change (although this sounds overkill?). Or
>>> are there sprint days to try and knock these things through easily with
>>> everyone on board to do it together?
>>>
>>> We are sort of damned if you do and damned if you don’t. But certainly we
>>> want to endure that progress can be made without losing the will to contribute.
>>>
>>
>> Indeed. Putting things in one repo cannot scale and cannot be a solution
>> for something that is neither core pharo nor an application. I encourage
>> everyone who wants to get a good description of this problem to read
>>
>> "Managing Design Data: The Five Dimensions of CAD Frameworks, Configuration
>> Management, and Product Data Management" by Peter van den Hamer & Kees
>> Lepoeter.
>>
>> With git and github a solution to decouple fast-moving from slow-moving
>> projects seems to be indeed to fork and make PRs.
>> That only works if the quality of the PRs is high enough and we manage to
>> use the feedback from slower-moving projects well.
>>
>> Earlier, we’ve seen projects like Magma being overwhelmed by the number of
>> needed changes, and Pier being broken by Pillar not respecting its
>> constraints.
>>
>> With tools like Travis, it is quickly clear if a PR would result in a green
>> build in the original repo.
>>
>> With projects where Pharo uses only the core, and applications use more
>> than that, the applications still have a dependency problem: if the core
>> changes in Pharo influence the other parts, someone needs to do the work to
>> make those parts work again. With forked repos, that can be a pharo
>> maintainer, the project maintainer or the application maintainer. All three
>> need to be able to make those changes. And they need to be decoupled from
>> having to make them immediately. And being able to have the discussion
>> about the exact implementation independently from implementing a stop-gap
>> solution now is also valuable.
>>
>> So if Calypso is supposed to be extendable and only the core part is part
>> of Pharo, having it as an external project makes sense. With a fork for
>> Pharo to move at its own speed. If Iceberg is Pharo-only, just having
>> different branches for different Pharo versions, it sounds to me like it
>> might be better of in the Pharo project. Tonel is supposed to be
>> cross-platform so should be separate.
>>
>> Is this helpful?
>>
>> Stephan
>>
>>
>>
>


Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

Tim Mackinnon
In reply to this post by Ben Coman
It’s a tricky trade off as Norbert alludes too - in my recent example I needed some underlying base pieces in place (for the compiler’s ast) and those needed reviewing to then be committed - then there were two parts to Calypso that relied on those changes) that also needed reviewing and I wasn’t sure if Denis waited for the core approval or loaded up my PR - but anyway it took him a bit of time to process that and he came back with some better suggestions that I also needed to implement (which I had to find time to do as well).

When I noticed that the core Pharo pieces were merged, I then had to chase Denis to see if he was now happy and could merge my changes.

I guess it would be helpful if there was a way to easily load up multiple project pr’s in one go (like the suggested slice concept) so maintainers can easily review.  Probably more importantly is an easy way to track the status of multiple submissions so you can follow up with relevant people and push things along and also ensure things get committed in the right order (eg doc the dependency chain a bit better).

For me, after a few days I forgot about my Calypso changes and realised a few weeks later (by accident) and so could chase Denis.

I think it’s this latter case that Steph alludes to - you lose interest after a few days without some useful prompts and easy status tracking. If we can make that easier I think it would help.

Tim

Sent from my iPhone

> On 7 Nov 2018, at 05:48, Ben Coman <[hidden email]> wrote:
>
> I get the feeling what is needed is mirroring all dependent repos from
> the canonical location under http://github.com/pharo-project
> and a Slice-like tool (probably keeping the name "Slice") which...
> 1. Pulls all dependent repos to the local machine
> 2. Simultaneously commits to the local repos with the same commit message
> 3. Updates a bootstrap-configuration file holding commit-hashes of all
> the dependencies and commits with same commit message
> 4. Pushes that bootstrap-configuration file and all changed dependent
> repos to user's github account
> 5. Issues a pull request for the bootstrap-configuration file
> 6. Our CI then builds a test-image by commit-hash direct from each
> user's repo and if it passes, pulls dependent repo commits under
> pharo-project
> 7. CI can then issue PRs to the dependency canonical repos
>
> cheers -ben
>
>> On Wed, 7 Nov 2018 at 02:55, Stephane Ducasse <[hidden email]> wrote:
>>
>> Calypso is integral part of Pharo as Iceberg.
>> We started to discuss the problem in the team. Right now this project
>> spread kills us.
>>
>> Stef
>>> On Mon, Nov 5, 2018 at 11:56 AM Stephan Eggermont <[hidden email]> wrote:
>>>
>>> Tim Mackinnon <[hidden email]> wrote:
>>>>
>>>
>>>> In retrospect,  I’m wondering if successful projects that have proved
>>>> integration usefulness should be moved into the core repo?
>>>> (Iceberg/Calypso?) or are we missing something to help easily track the
>>>> journey of a multi faceted change (although this sounds overkill?). Or
>>>> are there sprint days to try and knock these things through easily with
>>>> everyone on board to do it together?
>>>>
>>>> We are sort of damned if you do and damned if you don’t. But certainly we
>>>> want to endure that progress can be made without losing the will to contribute.
>>>>
>>>
>>> Indeed. Putting things in one repo cannot scale and cannot be a solution
>>> for something that is neither core pharo nor an application. I encourage
>>> everyone who wants to get a good description of this problem to read
>>>
>>> "Managing Design Data: The Five Dimensions of CAD Frameworks, Configuration
>>> Management, and Product Data Management" by Peter van den Hamer & Kees
>>> Lepoeter.
>>>
>>> With git and github a solution to decouple fast-moving from slow-moving
>>> projects seems to be indeed to fork and make PRs.
>>> That only works if the quality of the PRs is high enough and we manage to
>>> use the feedback from slower-moving projects well.
>>>
>>> Earlier, we’ve seen projects like Magma being overwhelmed by the number of
>>> needed changes, and Pier being broken by Pillar not respecting its
>>> constraints.
>>>
>>> With tools like Travis, it is quickly clear if a PR would result in a green
>>> build in the original repo.
>>>
>>> With projects where Pharo uses only the core, and applications use more
>>> than that, the applications still have a dependency problem: if the core
>>> changes in Pharo influence the other parts, someone needs to do the work to
>>> make those parts work again. With forked repos, that can be a pharo
>>> maintainer, the project maintainer or the application maintainer. All three
>>> need to be able to make those changes. And they need to be decoupled from
>>> having to make them immediately. And being able to have the discussion
>>> about the exact implementation independently from implementing a stop-gap
>>> solution now is also valuable.
>>>
>>> So if Calypso is supposed to be extendable and only the core part is part
>>> of Pharo, having it as an external project makes sense. With a fork for
>>> Pharo to move at its own speed. If Iceberg is Pharo-only, just having
>>> different branches for different Pharo versions, it sounds to me like it
>>> might be better of in the Pharo project. Tonel is supposed to be
>>> cross-platform so should be separate.
>>>
>>> Is this helpful?
>>>
>>> Stephan
>>>
>>>
>>>
>>
>


Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

EstebanLM
It is not so easy.

A huge project as Pharo would profit to be split in order to manage its parts correctly. For example, we recently released iceberg 1.3.0. And there were some problems around and we evaluate the possibility of revert that release until we fix the problems. At the end, problems were not so important and the fix was made with a 1.3.1 release and almost immediately an 1.4.0.

Now, imagine If iceberg would be integrated in pharo.

1. The nature of “iceberg” would be lost in other parts. We cannot talk anymore of releasing 1.3.1 or whatever, we just release Pharo. No clear way to know what changed in Iceberg without digging in the full list of changes.
2. If we need to revert. How do we do it? There is no release so what do we revert? A commit? How many commits? How do we revert if development tree continued growing and iceberg commit are now mixed with others?
Of course, we could maintain a branch. But then I'd argüe is more or less the same as having a separated project.

Situation is not ideal (even if it is a lot better as before).
But I’m envisioning this solution: add multiple source directories capability.

Then we can have:

src/kernel
src/system
src/spec
src/iceberg
src/calypso
etc.

This will not just help to improve modularisation but we’ll gives a “free” feature : using git subtree to manage those directories.
For those who do not know: subtree allow us to merge different project trees into one. But the important part is how it will behave in Pharo (or other projects adopting it): For Pharo it will be JUST ONE REPOSITORY. So one single commit will spread to all repositories.
Now, the “price to pay” later is that time to time we need to push subtree from Pharo to their external projects (but this can be automated easily), and of course, doing “an iceberg release” means to do a pull subtree from external repository to Pharo (also very easy).

Esteban

Ps: remember: programming is an iterative improving process. “Process" is part of programming so iterations applies to it too.

> On 7 Nov 2018, at 07:02, Tim Mackinnon <[hidden email]> wrote:
>
> It’s a tricky trade off as Norbert alludes too - in my recent example I needed some underlying base pieces in place (for the compiler’s ast) and those needed reviewing to then be committed - then there were two parts to Calypso that relied on those changes) that also needed reviewing and I wasn’t sure if Denis waited for the core approval or loaded up my PR - but anyway it took him a bit of time to process that and he came back with some better suggestions that I also needed to implement (which I had to find time to do as well).
>
> When I noticed that the core Pharo pieces were merged, I then had to chase Denis to see if he was now happy and could merge my changes.
>
> I guess it would be helpful if there was a way to easily load up multiple project pr’s in one go (like the suggested slice concept) so maintainers can easily review.  Probably more importantly is an easy way to track the status of multiple submissions so you can follow up with relevant people and push things along and also ensure things get committed in the right order (eg doc the dependency chain a bit better).
>
> For me, after a few days I forgot about my Calypso changes and realised a few weeks later (by accident) and so could chase Denis.
>
> I think it’s this latter case that Steph alludes to - you lose interest after a few days without some useful prompts and easy status tracking. If we can make that easier I think it would help.
>
> Tim
>
> Sent from my iPhone
>
>> On 7 Nov 2018, at 05:48, Ben Coman <[hidden email]> wrote:
>>
>> I get the feeling what is needed is mirroring all dependent repos from
>> the canonical location under http://github.com/pharo-project
>> and a Slice-like tool (probably keeping the name "Slice") which...
>> 1. Pulls all dependent repos to the local machine
>> 2. Simultaneously commits to the local repos with the same commit message
>> 3. Updates a bootstrap-configuration file holding commit-hashes of all
>> the dependencies and commits with same commit message
>> 4. Pushes that bootstrap-configuration file and all changed dependent
>> repos to user's github account
>> 5. Issues a pull request for the bootstrap-configuration file
>> 6. Our CI then builds a test-image by commit-hash direct from each
>> user's repo and if it passes, pulls dependent repo commits under
>> pharo-project
>> 7. CI can then issue PRs to the dependency canonical repos
>>
>> cheers -ben
>>
>>> On Wed, 7 Nov 2018 at 02:55, Stephane Ducasse <[hidden email]> wrote:
>>>
>>> Calypso is integral part of Pharo as Iceberg.
>>> We started to discuss the problem in the team. Right now this project
>>> spread kills us.
>>>
>>> Stef
>>>> On Mon, Nov 5, 2018 at 11:56 AM Stephan Eggermont <[hidden email]> wrote:
>>>>
>>>> Tim Mackinnon <[hidden email]> wrote:
>>>>>
>>>>
>>>>> In retrospect,  I’m wondering if successful projects that have proved
>>>>> integration usefulness should be moved into the core repo?
>>>>> (Iceberg/Calypso?) or are we missing something to help easily track the
>>>>> journey of a multi faceted change (although this sounds overkill?). Or
>>>>> are there sprint days to try and knock these things through easily with
>>>>> everyone on board to do it together?
>>>>>
>>>>> We are sort of damned if you do and damned if you don’t. But certainly we
>>>>> want to endure that progress can be made without losing the will to contribute.
>>>>>
>>>>
>>>> Indeed. Putting things in one repo cannot scale and cannot be a solution
>>>> for something that is neither core pharo nor an application. I encourage
>>>> everyone who wants to get a good description of this problem to read
>>>>
>>>> "Managing Design Data: The Five Dimensions of CAD Frameworks, Configuration
>>>> Management, and Product Data Management" by Peter van den Hamer & Kees
>>>> Lepoeter.
>>>>
>>>> With git and github a solution to decouple fast-moving from slow-moving
>>>> projects seems to be indeed to fork and make PRs.
>>>> That only works if the quality of the PRs is high enough and we manage to
>>>> use the feedback from slower-moving projects well.
>>>>
>>>> Earlier, we’ve seen projects like Magma being overwhelmed by the number of
>>>> needed changes, and Pier being broken by Pillar not respecting its
>>>> constraints.
>>>>
>>>> With tools like Travis, it is quickly clear if a PR would result in a green
>>>> build in the original repo.
>>>>
>>>> With projects where Pharo uses only the core, and applications use more
>>>> than that, the applications still have a dependency problem: if the core
>>>> changes in Pharo influence the other parts, someone needs to do the work to
>>>> make those parts work again. With forked repos, that can be a pharo
>>>> maintainer, the project maintainer or the application maintainer. All three
>>>> need to be able to make those changes. And they need to be decoupled from
>>>> having to make them immediately. And being able to have the discussion
>>>> about the exact implementation independently from implementing a stop-gap
>>>> solution now is also valuable.
>>>>
>>>> So if Calypso is supposed to be extendable and only the core part is part
>>>> of Pharo, having it as an external project makes sense. With a fork for
>>>> Pharo to move at its own speed. If Iceberg is Pharo-only, just having
>>>> different branches for different Pharo versions, it sounds to me like it
>>>> might be better of in the Pharo project. Tonel is supposed to be
>>>> cross-platform so should be separate.
>>>>
>>>> Is this helpful?
>>>>
>>>> Stephan
>>>>
>>>>
>>>>
>>>
>>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

Stephan Eggermont-3
In reply to this post by Chris Muller-3
Chris Muller <[hidden email]> wrote:
>> Earlier, we’ve seen projects like Magma being overwhelmed by the number of
>> needed changes,
>
> I'm curious what you meant by this.  I'm not aware of Magma ever
> having been overwhelmed.  Its design has made it easy to be one of the
> most-available and consumable pieces of software for every version of
> Squeak from 2007 to today.  Did you mean the Pharo port?  It doesn't
> really do any magic, I'd be surprised if it would be very difficult to
> port to Pharo, but I don't know.

Several people have been working on a Magma version for Pharo. At the time
(Pharo 1.0-1.2) the Pharo CI infrastructure was not giving enough feedback
to keep the port running. Once a year or so someone comes along who tries
fixing the port, and that appears to be too difficult or time consuming for
them. It needs pretty deep knowledge about internals. I agree that it would
probably not be very difficult for a long time pharo/squeak developer.
Finding out what exactly changed and why in the past 8 years is not so easy
for someone new.

Without someone using it in production on Pharo, there is not enough
incentive to keep up with what changes in Pharo. There’s a chicken and egg
problem there

Stephan



Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

Ben Coman
In reply to this post by EstebanLM
On Wed, 7 Nov 2018 at 17:16, Esteban Lorenzano <[hidden email]> wrote:

>
> It is not so easy.
>
> A huge project as Pharo would profit to be split in order to manage its parts correctly. For example, we recently released iceberg 1.3.0. And there were some problems around and we evaluate the possibility of revert that release until we fix the problems. At the end, problems were not so important and the fix was made with a 1.3.1 release and almost immediately an 1.4.0.
>
> Now, imagine If iceberg would be integrated in pharo.
>
> 1. The nature of “iceberg” would be lost in other parts. We cannot talk anymore of releasing 1.3.1 or whatever, we just release Pharo. No clear way to know what changed in Iceberg without digging in the full list of changes.
> 2. If we need to revert. How do we do it? There is no release so what do we revert? A commit? How many commits? How do we revert if development tree continued growing and iceberg commit are now mixed with others?
> Of course, we could maintain a branch. But then I'd argüe is more or less the same as having a separated project.
>
> Situation is not ideal (even if it is a lot better as before).
> But I’m envisioning this solution: add multiple source directories capability.
>
> Then we can have:
>
> src/kernel
> src/system
> src/spec
> src/iceberg
> src/calypso
> etc.
>
> This will not just help to improve modularisation but we’ll gives a “free” feature : using git subtree to manage those directories.
> For those who do not know: subtree allow us to merge different project trees into one. But the important part is how it will behave in Pharo (or other projects adopting it): For Pharo it will be JUST ONE REPOSITORY. So one single commit will spread to all repositories.
> Now, the “price to pay” later is that time to time we need to push subtree from Pharo to their external projects (but this can be automated easily), and of course, doing “an iceberg release” means to do a pull subtree from external repository to Pharo (also very easy).

Why not a submodule approach?  I do vaguely remember you having some
pain with it integrating the opensmalltalk-vm repo under the pharo-vm
repo before Pharo started more directly using the opensmallk-vm CI
products.


I thought I might have something useful to contribute to discussion by
finding the good article [1] I remembered
that compared subtree and submodule, the summary of which is...

   * Is the external repository something you own yourself and are
likely to push code back to?
     Then use a submodule. This gives you the quickest and easiest way
for you to push your changes back.

   * Is the external repository third party code that you are unlikely
to push anything back to?
     Then use a subtree. This gives the advantage of not having to
give people permissions to an extra repo when you are giving them
access to the code base, and also reduces the chance that someone will
forget to run a git submodule update. [But this could be automated in
Pharo]


But then I came across [2] which says...
    * Submodules [...] work well when you want to include a
third-party library in your project that only occasionally needs to be
updated.

so I don't know.
[1] https://codewinsarguments.co/2016/05/01/git-submodules-vs-git-subtrees/
[2] http://www.mos6581.org/git_subtree_alternative


I think main issues to consider between the two options are:
    A. the effect on history between Pharo repo and dependent repos,
of commits to either repo
    B. how branching is handled between Pharo repo and dependent repos
and I don't know really have my head around that, so for now I'll shut it. :)


anyway, my understanding was that subtree was implemented in shell
scripts and not libgit so does that make it more difficult?
   https://stackoverflow.com/a/25474895

cheers -ben


>
> Esteban
>
> Ps: remember: programming is an iterative improving process. “Process" is part of programming so iterations applies to it too.
>
> > On 7 Nov 2018, at 07:02, Tim Mackinnon <[hidden email]> wrote:
> >
> > It’s a tricky trade off as Norbert alludes too - in my recent example I needed some underlying base pieces in place (for the compiler’s ast) and those needed reviewing to then be committed - then there were two parts to Calypso that relied on those changes) that also needed reviewing and I wasn’t sure if Denis waited for the core approval or loaded up my PR - but anyway it took him a bit of time to process that and he came back with some better suggestions that I also needed to implement (which I had to find time to do as well).
> >
> > When I noticed that the core Pharo pieces were merged, I then had to chase Denis to see if he was now happy and could merge my changes.
> >
> > I guess it would be helpful if there was a way to easily load up multiple project pr’s in one go (like the suggested slice concept) so maintainers can easily review.  Probably more importantly is an easy way to track the status of multiple submissions so you can follow up with relevant people and push things along and also ensure things get committed in the right order (eg doc the dependency chain a bit better).
> >
> > For me, after a few days I forgot about my Calypso changes and realised a few weeks later (by accident) and so could chase Denis.
> >
> > I think it’s this latter case that Steph alludes to - you lose interest after a few days without some useful prompts and easy status tracking. If we can make that easier I think it would help.
> >
> > Tim
> >
> > Sent from my iPhone
> >
> >> On 7 Nov 2018, at 05:48, Ben Coman <[hidden email]> wrote:
> >>
> >> I get the feeling what is needed is mirroring all dependent repos from
> >> the canonical location under http://github.com/pharo-project
> >> and a Slice-like tool (probably keeping the name "Slice") which...
> >> 1. Pulls all dependent repos to the local machine
> >> 2. Simultaneously commits to the local repos with the same commit message
> >> 3. Updates a bootstrap-configuration file holding commit-hashes of all
> >> the dependencies and commits with same commit message
> >> 4. Pushes that bootstrap-configuration file and all changed dependent
> >> repos to user's github account
> >> 5. Issues a pull request for the bootstrap-configuration file
> >> 6. Our CI then builds a test-image by commit-hash direct from each
> >> user's repo and if it passes, pulls dependent repo commits under
> >> pharo-project
> >> 7. CI can then issue PRs to the dependency canonical repos
> >>
> >> cheers -ben
> >>
> >>> On Wed, 7 Nov 2018 at 02:55, Stephane Ducasse <[hidden email]> wrote:
> >>>
> >>> Calypso is integral part of Pharo as Iceberg.
> >>> We started to discuss the problem in the team. Right now this project
> >>> spread kills us.
> >>>
> >>> Stef
> >>>> On Mon, Nov 5, 2018 at 11:56 AM Stephan Eggermont <[hidden email]> wrote:
> >>>>
> >>>> Tim Mackinnon <[hidden email]> wrote:
> >>>>>
> >>>>
> >>>>> In retrospect,  I’m wondering if successful projects that have proved
> >>>>> integration usefulness should be moved into the core repo?
> >>>>> (Iceberg/Calypso?) or are we missing something to help easily track the
> >>>>> journey of a multi faceted change (although this sounds overkill?). Or
> >>>>> are there sprint days to try and knock these things through easily with
> >>>>> everyone on board to do it together?
> >>>>>
> >>>>> We are sort of damned if you do and damned if you don’t. But certainly we
> >>>>> want to endure that progress can be made without losing the will to contribute.
> >>>>>
> >>>>
> >>>> Indeed. Putting things in one repo cannot scale and cannot be a solution
> >>>> for something that is neither core pharo nor an application. I encourage
> >>>> everyone who wants to get a good description of this problem to read
> >>>>
> >>>> "Managing Design Data: The Five Dimensions of CAD Frameworks, Configuration
> >>>> Management, and Product Data Management" by Peter van den Hamer & Kees
> >>>> Lepoeter.
> >>>>
> >>>> With git and github a solution to decouple fast-moving from slow-moving
> >>>> projects seems to be indeed to fork and make PRs.
> >>>> That only works if the quality of the PRs is high enough and we manage to
> >>>> use the feedback from slower-moving projects well.
> >>>>
> >>>> Earlier, we’ve seen projects like Magma being overwhelmed by the number of
> >>>> needed changes, and Pier being broken by Pillar not respecting its
> >>>> constraints.
> >>>>
> >>>> With tools like Travis, it is quickly clear if a PR would result in a green
> >>>> build in the original repo.
> >>>>
> >>>> With projects where Pharo uses only the core, and applications use more
> >>>> than that, the applications still have a dependency problem: if the core
> >>>> changes in Pharo influence the other parts, someone needs to do the work to
> >>>> make those parts work again. With forked repos, that can be a pharo
> >>>> maintainer, the project maintainer or the application maintainer. All three
> >>>> need to be able to make those changes. And they need to be decoupled from
> >>>> having to make them immediately. And being able to have the discussion
> >>>> about the exact implementation independently from implementing a stop-gap
> >>>> solution now is also valuable.
> >>>>
> >>>> So if Calypso is supposed to be extendable and only the core part is part
> >>>> of Pharo, having it as an external project makes sense. With a fork for
> >>>> Pharo to move at its own speed. If Iceberg is Pharo-only, just having
> >>>> different branches for different Pharo versions, it sounds to me like it
> >>>> might be better of in the Pharo project. Tonel is supposed to be
> >>>> cross-platform so should be separate.
> >>>>
> >>>> Is this helpful?
> >>>>
> >>>> Stephan
> >>>>
> >>>>
> >>>>
> >>>
> >>
> >
> >
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

EstebanLM


On 7 Nov 2018, at 14:19, Ben Coman <[hidden email]> wrote:

On Wed, 7 Nov 2018 at 17:16, Esteban Lorenzano <[hidden email]> wrote:

It is not so easy.

A huge project as Pharo would profit to be split in order to manage its parts correctly. For example, we recently released iceberg 1.3.0. And there were some problems around and we evaluate the possibility of revert that release until we fix the problems. At the end, problems were not so important and the fix was made with a 1.3.1 release and almost immediately an 1.4.0.

Now, imagine If iceberg would be integrated in pharo.

1. The nature of “iceberg” would be lost in other parts. We cannot talk anymore of releasing 1.3.1 or whatever, we just release Pharo. No clear way to know what changed in Iceberg without digging in the full list of changes.
2. If we need to revert. How do we do it? There is no release so what do we revert? A commit? How many commits? How do we revert if development tree continued growing and iceberg commit are now mixed with others?
Of course, we could maintain a branch. But then I'd argüe is more or less the same as having a separated project.

Situation is not ideal (even if it is a lot better as before).
But I’m envisioning this solution: add multiple source directories capability.

Then we can have:

src/kernel
src/system
src/spec
src/iceberg
src/calypso
etc.

This will not just help to improve modularisation but we’ll gives a “free” feature : using git subtree to manage those directories.
For those who do not know: subtree allow us to merge different project trees into one. But the important part is how it will behave in Pharo (or other projects adopting it): For Pharo it will be JUST ONE REPOSITORY. So one single commit will spread to all repositories.
Now, the “price to pay” later is that time to time we need to push subtree from Pharo to their external projects (but this can be automated easily), and of course, doing “an iceberg release” means to do a pull subtree from external repository to Pharo (also very easy).

Why not a submodule approach?

Don’t know, don’t care for the moment :)
We need to add multiple subdirectories capability. Then we will be able to chose whatever we want: submodules, subtrees, nothing at all. 

 I do vaguely remember you having some
pain with it integrating the opensmalltalk-vm repo under the pharo-vm
repo before Pharo started more directly using the opensmallk-vm CI
products.

That was my own stupidity, not subtree problems ;)

I thought I might have something useful to contribute to discussion by
finding the good article [1] I remembered
that compared subtree and submodule, the summary of which is...

  * Is the external repository something you own yourself and are
likely to push code back to?
    Then use a submodule. This gives you the quickest and easiest way
for you to push your changes back.

  * Is the external repository third party code that you are unlikely
to push anything back to?
    Then use a subtree. This gives the advantage of not having to
give people permissions to an extra repo when you are giving them
access to the code base, and also reduces the chance that someone will
forget to run a git submodule update. [But this could be automated in
Pharo]


But then I came across [2] which says...
   * Submodules [...] work well when you want to include a
third-party library in your project that only occasionally needs to be
updated.

so I don't know.
[1] https://codewinsarguments.co/2016/05/01/git-submodules-vs-git-subtrees/
[2] http://www.mos6581.org/git_subtree_alternative


I think main issues to consider between the two options are:
   A. the effect on history between Pharo repo and dependent repos,
of commits to either repo
   B. how branching is handled between Pharo repo and dependent repos
and I don't know really have my head around that, so for now I'll shut it. :)


anyway, my understanding was that subtree was implemented in shell
scripts and not libgit so does that make it more difficult?
  https://stackoverflow.com/a/25474895

Everything in git is implemented as shell scripts (that’s why libgit2 exists, in fact).

In any case, we will not handle the subtree (or submodule) pushing/pulling from iceberg. 
Doing a proper tooling on subtree will be complicated and time-effort consuming and sadly we do not have time to prioritise that now, then it will be an external task, at least for the moment.

Esteban


cheers -ben



Esteban

Ps: remember: programming is an iterative improving process. “Process" is part of programming so iterations applies to it too.

On 7 Nov 2018, at 07:02, Tim Mackinnon <[hidden email]> wrote:

It’s a tricky trade off as Norbert alludes too - in my recent example I needed some underlying base pieces in place (for the compiler’s ast) and those needed reviewing to then be committed - then there were two parts to Calypso that relied on those changes) that also needed reviewing and I wasn’t sure if Denis waited for the core approval or loaded up my PR - but anyway it took him a bit of time to process that and he came back with some better suggestions that I also needed to implement (which I had to find time to do as well).

When I noticed that the core Pharo pieces were merged, I then had to chase Denis to see if he was now happy and could merge my changes.

I guess it would be helpful if there was a way to easily load up multiple project pr’s in one go (like the suggested slice concept) so maintainers can easily review.  Probably more importantly is an easy way to track the status of multiple submissions so you can follow up with relevant people and push things along and also ensure things get committed in the right order (eg doc the dependency chain a bit better).

For me, after a few days I forgot about my Calypso changes and realised a few weeks later (by accident) and so could chase Denis.

I think it’s this latter case that Steph alludes to - you lose interest after a few days without some useful prompts and easy status tracking. If we can make that easier I think it would help.

Tim

Sent from my iPhone

On 7 Nov 2018, at 05:48, Ben Coman <[hidden email]> wrote:

I get the feeling what is needed is mirroring all dependent repos from
the canonical location under http://github.com/pharo-project
and a Slice-like tool (probably keeping the name "Slice") which...
1. Pulls all dependent repos to the local machine
2. Simultaneously commits to the local repos with the same commit message
3. Updates a bootstrap-configuration file holding commit-hashes of all
the dependencies and commits with same commit message
4. Pushes that bootstrap-configuration file and all changed dependent
repos to user's github account
5. Issues a pull request for the bootstrap-configuration file
6. Our CI then builds a test-image by commit-hash direct from each
user's repo and if it passes, pulls dependent repo commits under
pharo-project
7. CI can then issue PRs to the dependency canonical repos

cheers -ben

On Wed, 7 Nov 2018 at 02:55, Stephane Ducasse <[hidden email]> wrote:

Calypso is integral part of Pharo as Iceberg.
We started to discuss the problem in the team. Right now this project
spread kills us.

Stef
On Mon, Nov 5, 2018 at 11:56 AM Stephan Eggermont <[hidden email]> wrote:

Tim Mackinnon <[hidden email]> wrote:


In retrospect,  I’m wondering if successful projects that have proved
integration usefulness should be moved into the core repo?
(Iceberg/Calypso?) or are we missing something to help easily track the
journey of a multi faceted change (although this sounds overkill?). Or
are there sprint days to try and knock these things through easily with
everyone on board to do it together?

We are sort of damned if you do and damned if you don’t. But certainly we
want to endure that progress can be made without losing the will to contribute.


Indeed. Putting things in one repo cannot scale and cannot be a solution
for something that is neither core pharo nor an application. I encourage
everyone who wants to get a good description of this problem to read

"Managing Design Data: The Five Dimensions of CAD Frameworks, Configuration
Management, and Product Data Management" by Peter van den Hamer & Kees
Lepoeter.

With git and github a solution to decouple fast-moving from slow-moving
projects seems to be indeed to fork and make PRs.
That only works if the quality of the PRs is high enough and we manage to
use the feedback from slower-moving projects well.

Earlier, we’ve seen projects like Magma being overwhelmed by the number of
needed changes, and Pier being broken by Pillar not respecting its
constraints.

With tools like Travis, it is quickly clear if a PR would result in a green
build in the original repo.

With projects where Pharo uses only the core, and applications use more
than that, the applications still have a dependency problem: if the core
changes in Pharo influence the other parts, someone needs to do the work to
make those parts work again. With forked repos, that can be a pharo
maintainer, the project maintainer or the application maintainer. All three
need to be able to make those changes. And they need to be decoupled from
having to make them immediately. And being able to have the discussion
about the exact implementation independently from implementing a stop-gap
solution now is also valuable.

So if Calypso is supposed to be extendable and only the core part is part
of Pharo, having it as an external project makes sense. With a fork for
Pharo to move at its own speed. If Iceberg is Pharo-only, just having
different branches for different Pharo versions, it sounds to me like it
might be better of in the Pharo project. Tonel is supposed to be
cross-platform so should be separate.

Is this helpful?

Stephan

Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

Stephane Ducasse-3
In reply to this post by EstebanLM
> It is not so easy.
>
> A huge project as Pharo would profit to be split in order to manage its parts correctly. For example, we recently released iceberg 1.3.0. And there were some problems around and we evaluate the possibility of revert that release until we fix the problems. At the end, problems were not so important and the fix was made with a 1.3.1 release and almost immediately an 1.4.0.

This is because you want to see it like that.
Now issuing a new version of iceberg would just be integrated a branch
into Pharo. So I do not see why you could not commit to a branch and
work there
for Iceberg. Sorry but I do not buy your argument.
Why you want to have all the plugin of the VM at the same place and
not the core Pharo tool?

The message is clear to me: I will not work on Pharo because I cannot.
You will show me how you do that trivially stupid bug fix without
several PR AND synchronisation point!!!!!!
Because if you do not see that the synchronisation point between a PR
in project and a PR in Pharo will kill us.
What can I say. Nothing I will shut up but do not ask my support for
anything in the future.
Sorry to be aggressive but this week I could have fixed several
totally totally stupid glitches and I could not
You will have to prove me that I'm wrong:
https://pharo.fogbugz.com/f/cases/22626/Should-not-hardcode-CmdCommandAborted

And at the end, you will win and I will let you play with your process.
And I will not work on Pharo.


> Now, imagine If iceberg would be integrated in pharo.
>
> 1. The nature of “iceberg” would be lost in other parts. We cannot talk anymore of releasing 1.3.1 or whatever, we just release Pharo. No clear way to know what changed in Iceberg without digging in the full list of changes.
> 2. If we need to revert. How do we do it? There is no release so what do we revert? A commit? How many commits? How do we revert if development tree continued growing and iceberg commit are now mixed with others?
> Of course, we could maintain a branch. But then I'd argüe is more or less the same as having a separated project.
>
> Situation is not ideal (even if it is a lot better as before).

How better? We cannot fix simple crosscutting things in subparts of Pharo?


> But I’m envisioning this solution: add multiple source directories capability.

This does not resolve the synchronisation point.
And I do not see how it helps other projects like Moose with multiple
repo so we lose on two sides.
1 Too complex for Pharo core and 2 not helping projects build out of
external projects.

I think that we should work on more important things instead of
building our own new problems. (cleaning, better tools, Cargo,
headless, better VM, Modules?)
Merging the Pharo core projects would solved the first (1) problem above.

But you are right let us look smart and increase the entropy for the
sake of it.
It will be without me. I started and I will not read bug entries and
PR anymore.
If doing nothing is the way to get heard then I will do nothing
because I'm hurt each time I want to do something and I have enough.


> Then we can have:
>
> src/kernel
> src/system
> src/spec
> src/iceberg
> src/calypso
> etc.
>
> This will not just help to improve modularisation but we’ll gives a “free” feature : using git subtree to manage those directories.

I do not believe you. If that would be so easy why Pablo and Guille
would tell me that this is around 8 months of work?
Seriously.



> For those who do not know: subtree allow us to merge different project trees into one. But the important part is how it will behave in Pharo (or other projects adopting it): For Pharo it will be JUST ONE REPOSITORY. So one single commit will spread to all repositories.
> Now, the “price to pay” later is that time to time we need to push subtree from Pharo to their external projects (but this can be automated easily), and of course, doing “an iceberg release” means to do a pull subtree from external repository to Pharo (also very easy).
>
> Esteban
>
> Ps: remember: programming is an iterative improving process. “Process" is part of programming so iterations applies to it too.
>
> > On 7 Nov 2018, at 07:02, Tim Mackinnon <[hidden email]> wrote:
> >
> > It’s a tricky trade off as Norbert alludes too - in my recent example I needed some underlying base pieces in place (for the compiler’s ast) and those needed reviewing to then be committed - then there were two parts to Calypso that relied on those changes) that also needed reviewing and I wasn’t sure if Denis waited for the core approval or loaded up my PR - but anyway it took him a bit of time to process that and he came back with some better suggestions that I also needed to implement (which I had to find time to do as well).
> >
> > When I noticed that the core Pharo pieces were merged, I then had to chase Denis to see if he was now happy and could merge my changes.
> >
> > I guess it would be helpful if there was a way to easily load up multiple project pr’s in one go (like the suggested slice concept) so maintainers can easily review.  Probably more importantly is an easy way to track the status of multiple submissions so you can follow up with relevant people and push things along and also ensure things get committed in the right order (eg doc the dependency chain a bit better).
> >
> > For me, after a few days I forgot about my Calypso changes and realised a few weeks later (by accident) and so could chase Denis.
> >
> > I think it’s this latter case that Steph alludes to - you lose interest after a few days without some useful prompts and easy status tracking. If we can make that easier I think it would help.
> >
> > Tim
> >
> > Sent from my iPhone
> >
> >> On 7 Nov 2018, at 05:48, Ben Coman <[hidden email]> wrote:
> >>
> >> I get the feeling what is needed is mirroring all dependent repos from
> >> the canonical location under http://github.com/pharo-project
> >> and a Slice-like tool (probably keeping the name "Slice") which...
> >> 1. Pulls all dependent repos to the local machine
> >> 2. Simultaneously commits to the local repos with the same commit message
> >> 3. Updates a bootstrap-configuration file holding commit-hashes of all
> >> the dependencies and commits with same commit message
> >> 4. Pushes that bootstrap-configuration file and all changed dependent
> >> repos to user's github account
> >> 5. Issues a pull request for the bootstrap-configuration file
> >> 6. Our CI then builds a test-image by commit-hash direct from each
> >> user's repo and if it passes, pulls dependent repo commits under
> >> pharo-project
> >> 7. CI can then issue PRs to the dependency canonical repos
> >>
> >> cheers -ben
> >>
> >>> On Wed, 7 Nov 2018 at 02:55, Stephane Ducasse <[hidden email]> wrote:
> >>>
> >>> Calypso is integral part of Pharo as Iceberg.
> >>> We started to discuss the problem in the team. Right now this project
> >>> spread kills us.
> >>>
> >>> Stef
> >>>> On Mon, Nov 5, 2018 at 11:56 AM Stephan Eggermont <[hidden email]> wrote:
> >>>>
> >>>> Tim Mackinnon <[hidden email]> wrote:
> >>>>>
> >>>>
> >>>>> In retrospect,  I’m wondering if successful projects that have proved
> >>>>> integration usefulness should be moved into the core repo?
> >>>>> (Iceberg/Calypso?) or are we missing something to help easily track the
> >>>>> journey of a multi faceted change (although this sounds overkill?). Or
> >>>>> are there sprint days to try and knock these things through easily with
> >>>>> everyone on board to do it together?
> >>>>>
> >>>>> We are sort of damned if you do and damned if you don’t. But certainly we
> >>>>> want to endure that progress can be made without losing the will to contribute.
> >>>>>
> >>>>
> >>>> Indeed. Putting things in one repo cannot scale and cannot be a solution
> >>>> for something that is neither core pharo nor an application. I encourage
> >>>> everyone who wants to get a good description of this problem to read
> >>>>
> >>>> "Managing Design Data: The Five Dimensions of CAD Frameworks, Configuration
> >>>> Management, and Product Data Management" by Peter van den Hamer & Kees
> >>>> Lepoeter.
> >>>>
> >>>> With git and github a solution to decouple fast-moving from slow-moving
> >>>> projects seems to be indeed to fork and make PRs.
> >>>> That only works if the quality of the PRs is high enough and we manage to
> >>>> use the feedback from slower-moving projects well.
> >>>>
> >>>> Earlier, we’ve seen projects like Magma being overwhelmed by the number of
> >>>> needed changes, and Pier being broken by Pillar not respecting its
> >>>> constraints.
> >>>>
> >>>> With tools like Travis, it is quickly clear if a PR would result in a green
> >>>> build in the original repo.
> >>>>
> >>>> With projects where Pharo uses only the core, and applications use more
> >>>> than that, the applications still have a dependency problem: if the core
> >>>> changes in Pharo influence the other parts, someone needs to do the work to
> >>>> make those parts work again. With forked repos, that can be a pharo
> >>>> maintainer, the project maintainer or the application maintainer. All three
> >>>> need to be able to make those changes. And they need to be decoupled from
> >>>> having to make them immediately. And being able to have the discussion
> >>>> about the exact implementation independently from implementing a stop-gap
> >>>> solution now is also valuable.
> >>>>
> >>>> So if Calypso is supposed to be extendable and only the core part is part
> >>>> of Pharo, having it as an external project makes sense. With a fork for
> >>>> Pharo to move at its own speed. If Iceberg is Pharo-only, just having
> >>>> different branches for different Pharo versions, it sounds to me like it
> >>>> might be better of in the Pharo project. Tonel is supposed to be
> >>>> cross-platform so should be separate.
> >>>>
> >>>> Is this helpful?
> >>>>
> >>>> Stephan
> >>>>
> >>>>
> >>>>
> >>>
> >>
> >
> >
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

Esteban A. Maringolo
Isn't working with "core projects" in the Pharo repository an actual fork of each project? 
One thing is "Kernel" (which is seldom committed outside of the context of the Pharo repo) and another one is Calypso/Iceberg/Zinc, etc.

What's the practical difference (in terms of code) between such a fork and depending on a particular commit/tag of the referenced project?

ps: These are honest, maybe naive, questions, so please answer accordingly.

Esteban A. Maringolo
Reply | Threaded
Open this post in threaded view
|

Re: Cannot use Zinc in Pharo7 anymore

EstebanLM
In reply to this post by Stephane Ducasse-3

Hi,

> On 7 Nov 2018, at 22:26, Stephane Ducasse <[hidden email]> wrote:
>
>> It is not so easy.
>>
>> A huge project as Pharo would profit to be split in order to manage its parts correctly. For example, we recently released iceberg 1.3.0. And there were some problems around and we evaluate the possibility of revert that release until we fix the problems. At the end, problems were not so important and the fix was made with a 1.3.1 release and almost immediately an 1.4.0.
>
> This is because you want to see it like that.
> Now issuing a new version of iceberg would just be integrated a branch
> into Pharo. So I do not see why you could not commit to a branch and
> work there
> for Iceberg. Sorry but I do not buy your argument.
> Why you want to have all the plugin of the VM at the same place and
> not the core Pharo tool?

I do want all sources in a single repository.
Is just, I want it in a clean way, that will help us improve modularisation and task/team working.

And in the case of VM, to be honest I would prefer to have the plugins separated, is just that is not possible as it is now because:

- not all “plugins” are real plugins, in the sense I cannot take them out and expect the VM to work. Take “FilePlugin” as an example. This plugins are more like “modules” that happens to use the same structure as real plugins.
- plugins are all spread in the web. And they are split in two: Smalltalk part is in some place and platform files are all on  osvm repository. *This* is annoying.

A good organisation would be:
- all VM sources with all required modules (mandatory plugins) together.
- each real optional plugin in a separated repository along with their own makefiles, allowing the build of them without needing the full VM (but also allowing the build of the VM without needing to checkout the plugins).
- and all of them organised under the same organisation (opensmalltalk)


Also, having “all VM sources together” does not means I want then all mixed. I would also like to have them correctly separated in something like:

src
        vm
                smalltalk
                        ...
                platform
                        unix
                        macOS
                        windows
        modules
                filemodule
                        smalltalk
                        platforms
                                unix
                                macOS
                                windows
                ...

But this is a lot of work, and then we agreed in a solution that will work but is not the best.

Now, I do believe we need to do steps to go there with the VM organisation and also with Pharo organisation.

My proposal is to have all sources in a single repository, but organised in a way that enhance modularity and for the same price we can benefit of using subtrees (or submodules), but we do not need to do it, is your a choice.

So, in my plans, I want to create this structure for Pharo sources:

src
        kernel
        system
        graphics
        spec
        tools
                playground
                debugger
                calypso
                iceberg
                (this is just an example, whatever the tools are)
                …

And to achieve this, all we need is to add support to multiple directories to iceberg (which is something that is in our roadmap anyway).

Cheers,
Esteban

>
> The message is clear to me: I will not work on Pharo because I cannot.
> You will show me how you do that trivially stupid bug fix without
> several PR AND synchronisation point!!!!!!
> Because if you do not see that the synchronisation point between a PR
> in project and a PR in Pharo will kill us.
> What can I say. Nothing I will shut up but do not ask my support for
> anything in the future.
> Sorry to be aggressive but this week I could have fixed several
> totally totally stupid glitches and I could not
> You will have to prove me that I'm wrong:
> https://pharo.fogbugz.com/f/cases/22626/Should-not-hardcode-CmdCommandAborted
>
> And at the end, you will win and I will let you play with your process.
> And I will not work on Pharo.
>
>
>> Now, imagine If iceberg would be integrated in pharo.
>>
>> 1. The nature of “iceberg” would be lost in other parts. We cannot talk anymore of releasing 1.3.1 or whatever, we just release Pharo. No clear way to know what changed in Iceberg without digging in the full list of changes.
>> 2. If we need to revert. How do we do it? There is no release so what do we revert? A commit? How many commits? How do we revert if development tree continued growing and iceberg commit are now mixed with others?
>> Of course, we could maintain a branch. But then I'd argüe is more or less the same as having a separated project.
>>
>> Situation is not ideal (even if it is a lot better as before).
>
> How better? We cannot fix simple crosscutting things in subparts of Pharo?
>
>
>> But I’m envisioning this solution: add multiple source directories capability.
>
> This does not resolve the synchronisation point.
> And I do not see how it helps other projects like Moose with multiple
> repo so we lose on two sides.
> 1 Too complex for Pharo core and 2 not helping projects build out of
> external projects.
>
> I think that we should work on more important things instead of
> building our own new problems. (cleaning, better tools, Cargo,
> headless, better VM, Modules?)
> Merging the Pharo core projects would solved the first (1) problem above.
>
> But you are right let us look smart and increase the entropy for the
> sake of it.
> It will be without me. I started and I will not read bug entries and
> PR anymore.
> If doing nothing is the way to get heard then I will do nothing
> because I'm hurt each time I want to do something and I have enough.
>
>
>> Then we can have:
>>
>> src/kernel
>> src/system
>> src/spec
>> src/iceberg
>> src/calypso
>> etc.
>>
>> This will not just help to improve modularisation but we’ll gives a “free” feature : using git subtree to manage those directories.
>
> I do not believe you. If that would be so easy why Pablo and Guille
> would tell me that this is around 8 months of work?
> Seriously.
>
>
>
>> For those who do not know: subtree allow us to merge different project trees into one. But the important part is how it will behave in Pharo (or other projects adopting it): For Pharo it will be JUST ONE REPOSITORY. So one single commit will spread to all repositories.
>> Now, the “price to pay” later is that time to time we need to push subtree from Pharo to their external projects (but this can be automated easily), and of course, doing “an iceberg release” means to do a pull subtree from external repository to Pharo (also very easy).
>>
>> Esteban
>>
>> Ps: remember: programming is an iterative improving process. “Process" is part of programming so iterations applies to it too.
>>
>>> On 7 Nov 2018, at 07:02, Tim Mackinnon <[hidden email]> wrote:
>>>
>>> It’s a tricky trade off as Norbert alludes too - in my recent example I needed some underlying base pieces in place (for the compiler’s ast) and those needed reviewing to then be committed - then there were two parts to Calypso that relied on those changes) that also needed reviewing and I wasn’t sure if Denis waited for the core approval or loaded up my PR - but anyway it took him a bit of time to process that and he came back with some better suggestions that I also needed to implement (which I had to find time to do as well).
>>>
>>> When I noticed that the core Pharo pieces were merged, I then had to chase Denis to see if he was now happy and could merge my changes.
>>>
>>> I guess it would be helpful if there was a way to easily load up multiple project pr’s in one go (like the suggested slice concept) so maintainers can easily review.  Probably more importantly is an easy way to track the status of multiple submissions so you can follow up with relevant people and push things along and also ensure things get committed in the right order (eg doc the dependency chain a bit better).
>>>
>>> For me, after a few days I forgot about my Calypso changes and realised a few weeks later (by accident) and so could chase Denis.
>>>
>>> I think it’s this latter case that Steph alludes to - you lose interest after a few days without some useful prompts and easy status tracking. If we can make that easier I think it would help.
>>>
>>> Tim
>>>
>>> Sent from my iPhone
>>>
>>>> On 7 Nov 2018, at 05:48, Ben Coman <[hidden email]> wrote:
>>>>
>>>> I get the feeling what is needed is mirroring all dependent repos from
>>>> the canonical location under http://github.com/pharo-project
>>>> and a Slice-like tool (probably keeping the name "Slice") which...
>>>> 1. Pulls all dependent repos to the local machine
>>>> 2. Simultaneously commits to the local repos with the same commit message
>>>> 3. Updates a bootstrap-configuration file holding commit-hashes of all
>>>> the dependencies and commits with same commit message
>>>> 4. Pushes that bootstrap-configuration file and all changed dependent
>>>> repos to user's github account
>>>> 5. Issues a pull request for the bootstrap-configuration file
>>>> 6. Our CI then builds a test-image by commit-hash direct from each
>>>> user's repo and if it passes, pulls dependent repo commits under
>>>> pharo-project
>>>> 7. CI can then issue PRs to the dependency canonical repos
>>>>
>>>> cheers -ben
>>>>
>>>>> On Wed, 7 Nov 2018 at 02:55, Stephane Ducasse <[hidden email]> wrote:
>>>>>
>>>>> Calypso is integral part of Pharo as Iceberg.
>>>>> We started to discuss the problem in the team. Right now this project
>>>>> spread kills us.
>>>>>
>>>>> Stef
>>>>>> On Mon, Nov 5, 2018 at 11:56 AM Stephan Eggermont <[hidden email]> wrote:
>>>>>>
>>>>>> Tim Mackinnon <[hidden email]> wrote:
>>>>>>>
>>>>>>
>>>>>>> In retrospect,  I’m wondering if successful projects that have proved
>>>>>>> integration usefulness should be moved into the core repo?
>>>>>>> (Iceberg/Calypso?) or are we missing something to help easily track the
>>>>>>> journey of a multi faceted change (although this sounds overkill?). Or
>>>>>>> are there sprint days to try and knock these things through easily with
>>>>>>> everyone on board to do it together?
>>>>>>>
>>>>>>> We are sort of damned if you do and damned if you don’t. But certainly we
>>>>>>> want to endure that progress can be made without losing the will to contribute.
>>>>>>>
>>>>>>
>>>>>> Indeed. Putting things in one repo cannot scale and cannot be a solution
>>>>>> for something that is neither core pharo nor an application. I encourage
>>>>>> everyone who wants to get a good description of this problem to read
>>>>>>
>>>>>> "Managing Design Data: The Five Dimensions of CAD Frameworks, Configuration
>>>>>> Management, and Product Data Management" by Peter van den Hamer & Kees
>>>>>> Lepoeter.
>>>>>>
>>>>>> With git and github a solution to decouple fast-moving from slow-moving
>>>>>> projects seems to be indeed to fork and make PRs.
>>>>>> That only works if the quality of the PRs is high enough and we manage to
>>>>>> use the feedback from slower-moving projects well.
>>>>>>
>>>>>> Earlier, we’ve seen projects like Magma being overwhelmed by the number of
>>>>>> needed changes, and Pier being broken by Pillar not respecting its
>>>>>> constraints.
>>>>>>
>>>>>> With tools like Travis, it is quickly clear if a PR would result in a green
>>>>>> build in the original repo.
>>>>>>
>>>>>> With projects where Pharo uses only the core, and applications use more
>>>>>> than that, the applications still have a dependency problem: if the core
>>>>>> changes in Pharo influence the other parts, someone needs to do the work to
>>>>>> make those parts work again. With forked repos, that can be a pharo
>>>>>> maintainer, the project maintainer or the application maintainer. All three
>>>>>> need to be able to make those changes. And they need to be decoupled from
>>>>>> having to make them immediately. And being able to have the discussion
>>>>>> about the exact implementation independently from implementing a stop-gap
>>>>>> solution now is also valuable.
>>>>>>
>>>>>> So if Calypso is supposed to be extendable and only the core part is part
>>>>>> of Pharo, having it as an external project makes sense. With a fork for
>>>>>> Pharo to move at its own speed. If Iceberg is Pharo-only, just having
>>>>>> different branches for different Pharo versions, it sounds to me like it
>>>>>> might be better of in the Pharo project. Tonel is supposed to be
>>>>>> cross-platform so should be separate.
>>>>>>
>>>>>> Is this helpful?
>>>>>>
>>>>>> Stephan
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>>
>


12